我无法使用HttpWebRequest向网址发帖请求。我已经应用了我在网上看到的所有建议。关于SO的大多数答案建议指定用户代理。我已经这样做并提供了超时但仍然会超时。我看到另一篇文章提到了指定readwritetimeout。我仍然得到相同的回复,"服务器超时"。使用浏览器发布帖子只需一秒钟,但使用C#中的代码会产生超时问题。这是我的代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2288.6 Safari/537.36";
request.Method = "POST";
request.KeepAlive = true;
request.CookieContainer = new CookieContainer();
request.Accept = "*/*";
request.ReadWriteTimeout = System.Threading.Timeout.Infinite;
request.Headers.Add("Accept-Encoding: gzip, deflate");
request.Headers.Add("Accept-Language: en-US");
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string Response = reader.ReadToEnd();
我在这一行得到了超时:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
我在这里错过了什么吗?
这是在配置中打开diagonostics后的日志。
System.Net Verbose: 0 : [0280] WebRequest::Create(http://mysite.url.here)
System.Net Verbose: 0 : [0280] HttpWebRequest#13062350::HttpWebRequest(http://mysite.url.here)
System.Net Information: 0 : [0280] Current OS installation type is 'Client'.
System.Net Information: 0 : [0280] RAS supported: True
System.Net Verbose: 0 : [0280] Exiting HttpWebRequest#13062350::HttpWebRequest()
System.Net Verbose: 0 : [0280] Exiting WebRequest::Create() -> HttpWebRequest#13062350
System.Net Error: 0 : [0280] Can't retrieve proxy settings for Uri 'http://mysite.url.here'. Error code: 12180.
System.Net Verbose: 0 : [0280] ServicePoint#10366524::ServicePoint(http://mysite.url.here:80)
System.Net Information: 0 : [0280] Associating HttpWebRequest#13062350 with ServicePoint#10366524
System.Net Verbose: 0 : [0280] HttpWebRequest#13062350::GetRequestStream()
System.Net Information: 0 : [0280] Associating Connection#63840421 with HttpWebRequest#13062350
System.Net Information: 0 : [0280] Connection#63840421 - Created connection from 192.168.1.5:13902 to 199.249.234.200:80.
System.Net Information: 0 : [0280] Associating HttpWebRequest#13062350 with ConnectStream#54246671
System.Net Information: 0 : [0280] HttpWebRequest#13062350 - Request: POST /Post-url-here HTTP/1.1
System.Net Information: 0 : [0280] ConnectStream#54246671 - Sending headers
{
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/42.0.2288.6 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: en-US
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Host: www.powersportrider.com
Content-Length: 101
Expect: 100-continue
Connection: Keep-Alive
}.
System.Net Verbose: 0 : [0280] Exiting ConnectStream#54246671::Write()
System.Net Verbose: 0 : [0280] ConnectStream#54246671::Close()
System.Net Verbose: 0 : [0280] Exiting ConnectStream#54246671::Close()
System.Net Verbose: 0 : [0280] HttpWebRequest#13062350::GetResponse()
System.Net Information: 0 : [0280] Connection#63840421 - Received status line: V
ersion=1.1, StatusCode=100, StatusDescription=Continue.
System.Net Information: 0 : [0280] Connection#63840421 - Received headers
{
}.
System.Net Verbose: 0 : [8668] HttpWebRequest#13062350::Abort(The operation hastimed out)
System.Net Verbose: 0 : [8668] Exiting HttpWebRequest#13062350::Abort()
System.Net Error: 0 : [0280] Exception in HttpWebRequest#13062350:: - The operation has timed out.
System.Net Error: 0 : [0280] Exception in HttpWebRequest#13062350::GetResponse - The operation has timed out.
System.Net Error: 0 : [0280] Exception in AppDomain#12036987::UnhandledException
Handler - The operation has timed out. at System.Net.HttpWebRequest.GetResponse()
答案 0 :(得分:4)
在request.GetResponse()
调用
request.ServicePoint.Expect100Continue = false;
request.ProtocolVersion = HttpVersion.Version11;
希望我花在这上面的时间可以更快地帮助别人。
答案 1 :(得分:0)
我遇到了同样的问题。 对我来说,修复就像使用块包装HttpWebResponse代码一样简单。
using (HttpWebResponse response = (HttpWebResponse) request.GetResponse())
{
// Do your processings here....
}
如果您向同一主机发出多个请求,并且WebResponse
未正确处理,则通常会发生此问题。这就是使用块作为救世主来到这里的原因。
答案 2 :(得分:0)
我遇到这个问题是因为其中一个参数是用大写字母发送的,而且应该用小写字母发送(愚蠢的错误)。希望这可以帮助某人做与我相同的错误。