2013-06-14 44 views
5

私のコードは、PHPスクリプトを介してサーバーに情報を提供する必要があります。C#では、ブラウザを開くことなく、バックグラウンドでURLを開くことは可能ですか?

基本的に私はwww.sitename.com/example.php?var1=1&var2=2&var3=3に電話したいと思いますが、ブラウザを開きたくないので、Process.Start(URL);は動作しません。

私はこのサイトに来て、答えを得ないようにしているので、私がこれまでにやったことや、私が得たエラーについて説明します。とにかく解決策が分かっている場合は、次の部分をスキップしてください。

私は周りを見回している、と私はPOSTを使用するためのソリューションを見た:

ASCIIEncoding encoding=new ASCIIEncoding(); 
string postData="var1=1&var2=2&var3=3"; 
byte[] data = encoding.GetBytes(postData); 

// Prepare web request... 
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://localhost/site.php"); 
myRequest.Method = "POST"; 
myRequest.ContentType="application/x-www-form-urlencoded"; 
myRequest.ContentLength = data.Length; 
Stream newStream=myRequest.GetRequestStream(); 

// Send the data. 
newStream.Write(data,0,data.Length); 
newStream.Close(); 

しかし、私はGETないPOSTを使用する必要があります。最初は解決策がmyRequest.Method = "POST";からGETに変更される可能性があると思っていましたが、これは動作しませんでした。それはGETの動作ではなく、URLからデータを引き出します。 (うまくいけば)PHPスクリプトのGET_要求を開始し、その後の人生と思われる、それはURLを呼ぶであろうと、論理の下

HttpwebRequest myRequest= (HttpWebRequest)WebRequest.Create("http://localhost/site.php" + postData); 
Stream newStream = myRequest.GetRequestStream(); 
newStream.Close() 

だから、私は、前のコードを変更しようとしましたダンディーだろう。ただし、次のエラーが発生しました。

A first chance exception of type 'System.Net.ProtocolViolationException' occurred in System.dll 
An unhandled exception of type 'System.Net.ProtocolViolationException' occurred in System.dll 
Additional information: Cannot send a content-body with this verb-type. 

ご協力いただきありがとうございます。

答えて

4
string postData="var1=1&var2=2&var3=3"; 
// Prepare web request... 
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(
        "http://yourserver/site.php?" + postData); 
myRequest.Method = "GET"; 
var resp =(HttpWebResponse) myRequest.GetResponse(); 

var result = new StreamReader(resp.GetResponseStream()).ReadToEnd(); 

または多分もっと簡単:

var data = new WebClient().DownloadString("http://yourserver/site.php?var1=1&var2=2&var3=3"); 

最も簡単な方法は、WebClientクラスを使用することで、より多くのオプション

+0

Visual Studio 2012でエラーが生成され、エラーが表示され、 'Stream newStream = myRequest.GetRequestStream(); ' という2つ目の解決方法が強調表示されます。エラーは発生しませんが、PHPページは何も登録していません。 – echolocation

+0

[fiddler](http://fiddler2.com/)を使用すると、システムプロキシ経由で実行されているコールを確認できます。 – rene

+0

私は問題を発見しました。 'http:// yourserver/site.php'にアクセスするには、中央認証サーバを介して認証が必要です。だから、私がサイトにアクセスしようとすると、まず認証にリダイレクトされます。 私は正しいユーザー名とパスワードを持っているとすれば、それを過ぎるにはどうにか分かりますか?どんな助けでもありがとう – echolocation

0

ためWebClientクラスを参照してください。それを使用してコードの2行だけで、あなたのURLを提供し、DownloadStringのようなメソッドを使用してください。

2

あなたは主に右ルートダウンしているように見える:私はsite.phpの終わりに?を追加しました

string postData="var1=1&var2=2&var3=3"; 

// Prepare web request... 
HttpwebRequest myRequest= (HttpWebRequest)WebRequest.Create(
    "http://localhost/site.php?" + postData); 

// Send the data. 
myRequest.GetResponse(); 

注意。

要求ストリームには物事を入れておく必要がありません。要求の本文にはGETリクエストのデータが含まれており、本文には含まれていません。 。

+0

これは非常に一般的ですが、99のように動作します。すべての可能な場合の9%、これはHTTPが機能する方法ではありません... RFC2616セクション9.1.1では、「GETとHEADメソッドは検索以外のアクションをとるべきではない」と述べています – DarkSquirrel42

関連する問題