내 HTTP 웹 요청 코드가 요청을 보내지 않는 이유는 무엇입니까?
-
23-08-2019 - |
문제
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를 사용하고 있습니다.
해결책
실제 요청을 수행해야합니다
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();
}
}
}
제휴하지 않습니다 StackOverflow