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

时间:2009-07-04 22:12:45

标签: c# .net httpwebrequest

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

POST http://10.0.0.1/st_poe.cgi

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, */*
Referer: http://10.0.0.1/RST_st_poe.htm
Accept-Language: en-US
User-Agent: 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)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: 10.0.0.1
Content-Length: 21
Connection: Keep-Alive
Pragma: no-cache
Authorization: Basic YWStaW47c3Jsa3NobQ==

ConMethod=++Connect++

我正在尝试使用以下代码执行此操作。它不起作用。

            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。

2 个答案:

答案 0 :(得分:12)

您应该使用

执行实际请求
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);

答案 1 :(得分:3)

Mehrdad说得对。我只想补充说,如果你要坚持使用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();
        }
    }
}
相关问题