Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的HTTP Web请求代码不发送请求?_C#_.net_Httpwebrequest - Fatal编程技术网

C# 为什么我的HTTP Web请求代码不发送请求?

C# 为什么我的HTTP Web请求代码不发送请求?,c#,.net,httpwebrequest,C#,.net,Httpwebrequest,如何在C中发布以下HTTP请求# 我正试图用下面的代码来实现它。它不起作用 string user = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password)); byte[] bytes = System.Text.Encoding.ASCII.GetBytes("ConMethod=++Connect++");

如何在C中发布以下HTTP请求#

我正试图用下面的代码来实现它。它不起作用

            string user = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password));

            byte[] bytes = System.Text.Encoding.ASCII.GetBytes("ConMethod=++Connect++");

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://10.0.0.1/st_poe.cgi");

            request.Method = "POST";
            request.Headers.Add("Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*");
            request.Referer = "http://10.0.0.1/RST_st_poe.htm";
            request.Headers.Add("Accept-Language: en-US");
            request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
            request.ContentType = "application/x-www-form-urlencoded";
            request.Headers.Add("Accept-Encoding: gzip, deflate");
            request.ContentLength = bytes.Length;
            request.Headers.Add("Host: 10.0.0.1");
            request.Headers.Add("Connection: Keep-Alive");
            request.Headers.Add("Pragma: no-cache");
            request.Headers.Add("Authorization: Basic "+user);


            Stream reqStream = request.GetRequestStream();

            reqStream.Write(bytes, 0, bytes.Length);

            reqStream.Close();

谁能指出我把事情搞砸了吗。我是第一次使用HttpWebRequest。

您应该使用

var response = request.GetResponse();
或者,您可以使用更简单的
System.Net.WebClient
类:

var client = new WebClient();
client.Headers["..."] = ...;
// Use one of the DownloadXXX/UploadXXX methods.
var responseBody = client.UploadData("Url", dataToUpload);
这是对的。我只想补充一点,如果您要坚持使用HttpWebRequest,那么您需要学会对任何分配的实现IDisposable的资源使用“使用”块:

var user =
    Convert.ToBase64String(
        Encoding.UTF8.GetBytes(username + ":" + password));

var bytes = Encoding.ASCII.GetBytes("ConMethod=++Connect++");

var request =
    (HttpWebRequest) WebRequest.Create("http://10.0.0.1/st_poe.cgi");

request.Method = "POST";
request.Headers.Add(
    "Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*");
request.Referer = "http://10.0.0.1/RST_st_poe.htm";
request.Headers.Add("Accept-Language: en-US");
request.UserAgent =
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("Accept-Encoding: gzip, deflate");
request.ContentLength = bytes.Length;
request.Headers.Add("Host: 10.0.0.1");
request.Headers.Add("Connection: Keep-Alive");
request.Headers.Add("Pragma: no-cache");
request.Headers.Add("Authorization: Basic " + user);

using (var reqStream = request.GetRequestStream())
{
    reqStream.Write(bytes, 0, bytes.Length);
}

using (var response = (HttpWebResponse) request.GetResponse())
{
    using (var responseStream = response.GetResponseStream())
    {
        using (var reader = new StreamReader(responseStream))
        {
            return reader.ReadToEnd();
        }
    }
}

我不知道有一个叫做UploadData()的方法很酷,我认为只有上传文件()才有可能。它不会使您的断言无效,即使用是一种方便的构造,但对于实现IDisposable的wcf CommunicationObject,
使用
对于新手来说是一种快速了解疯狂深度的方法…@code:我知道这一点。但请注意,WCF是我所知道的唯一一个严重的例外,这是由于WCF中的一个设计缺陷造成的。在所有其他情况下,类实现IDisposable的事实意味着您应该确保调用Dispose,在除一种情况外的所有情况下,这意味着您几乎肯定应该使用using块。如果HttpWebResponse上没有“using”或调用Dispose,则GET请求将在request.UserAgent给定值后挂起。我通过一些HttpWebRequest代码发现了这一点,这些代码用于检查连接与RestSharp结合使用时是否可用。
var user =
    Convert.ToBase64String(
        Encoding.UTF8.GetBytes(username + ":" + password));

var bytes = Encoding.ASCII.GetBytes("ConMethod=++Connect++");

var request =
    (HttpWebRequest) WebRequest.Create("http://10.0.0.1/st_poe.cgi");

request.Method = "POST";
request.Headers.Add(
    "Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*");
request.Referer = "http://10.0.0.1/RST_st_poe.htm";
request.Headers.Add("Accept-Language: en-US");
request.UserAgent =
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("Accept-Encoding: gzip, deflate");
request.ContentLength = bytes.Length;
request.Headers.Add("Host: 10.0.0.1");
request.Headers.Add("Connection: Keep-Alive");
request.Headers.Add("Pragma: no-cache");
request.Headers.Add("Authorization: Basic " + user);

using (var reqStream = request.GetRequestStream())
{
    reqStream.Write(bytes, 0, bytes.Length);
}

using (var response = (HttpWebResponse) request.GetResponse())
{
    using (var responseStream = response.GetResponseStream())
    {
        using (var reader = new StreamReader(responseStream))
        {
            return reader.ReadToEnd();
        }
    }
}