7

我的代码需要通过 php 脚本向服务器提供一些信息。

基本上我想打电话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();

但是,我需要使用GETnot POST。起初我认为解决方案可能是更改myRequest.Method = "POST";GET,但这不起作用,因为这不是GET工作方式,它从 URL 中提取数据。

所以,然后我尝试将以前的代码更改为:

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

在它会调用 URL 的逻辑下,这将(希望)在 php 脚本上启动 GET_ 请求,然后生活将是花花公子。然而,这导致了以下错误:

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

3 回答 3

5
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

于 2013-06-14T13:01:45.970 回答
2

您似乎大多走的是正确的路线:

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();

请注意,我已?site.php.

我们不必摆弄请求流,因为这就是将内容放入请求的正文中 - 正如您所说,GET请求的数据在 URL 中,而不是在它的正文中。

于 2013-06-14T13:04:14.600 回答
0

最简单的方法是使用WebClient类。使用它只需 2 行代码,只需提供您的 URL 并使用DownloadString.

于 2013-06-14T13:04:14.483 回答