在C#中,是否可以在后台打开URL而不打开浏览器?

在C#中,是否可以在后台打开URL而不打开浏览器?,c#,winforms,.net-4.5,C#,Winforms,.net 4.5,我的代码需要通过php脚本向服务器提供一些信息 基本上我想调用www.sitename.com/example.php?var1=1&var2=2&var3=3,但我不想打开浏览器,所以Process.Start(URL)不起作用 由于我来到这个网站是为了学习,而不是为了得到答案,我将主要解释我到目前为止所做的事情以及我所犯的错误。如果您知道解决方案,请跳过下一部分 我环顾四周,发现了一个使用POST的解决方案: ASCIIEncoding encoding=new ASCIIEncoding(

我的代码需要通过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();
但是,我需要使用
GET
而不是
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_uu请求,然后生活将变得非常美好。但是,这导致了以下错误:

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.
非常感谢您的帮助,谢谢

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

有关更多选项,请参见类

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

的方法,您似乎走上了正确的道路:

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中,而不是在其体中。

虽然这很常见,并且在99.9%的可能情况下都会起作用,但这并不是HTTP的工作方式。。。RFC2616第9.1.1节规定,“GET和HEAD方法不应具有采取除检索以外的其他操作的重要性”,对于您的第一个解决方案,Visual Studio 2012生成和错误并突出显示
Stream newStream=myRequest.GetRequestStream()
对于第二个解决方案,没有产生错误,但是php页面似乎没有注册任何内容。如果使用,您可以看到哪些调用是通过系统代理执行的。我发现了问题。进入
http://yourserver/site.php
我需要通过中央身份验证服务器进行身份验证。因此,当我尝试访问该站点时,它会首先将我重定向到身份验证。如果我有正确的用户名和密码,你知道如何克服这个问题吗?谢谢你的帮助