我正在尝试向网页发出请求,并得到一个错误"该操作已超时"。我试过重写默认超时,但没有运气。事实上,相同的url在浏览器中工作得很好,我的代码对其他域工作得很好,这表明也许我缺少标题或其他东西?谁能建议在请求中添加什么来解决超时问题?
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.mrporter.com/en-gb");
request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36");
var wresp = (HttpWebResponse)request.GetResponse();
-
响应数据的大小是多少,如果太大,可能会超时异常
-
端点的运行状况是什么。当您尝试从命令提示控制台
ping时,是否发现任何请求超时问题? -
增加请求超时值
请求。TimeOut =3600;//毫秒值
也许您没有遵循被返回的重定向?将此属性设置为true将指示web请求这样做,HttpWebRequest.AllowAutoRedirect
。我做了以下检查。
在Linux命令提示符下尝试了这个(http类似于curl,但我更喜欢它)
http --verbose --follow --timeout 3600 GET 'https://www.mrporter.com/en-gb'
详细选项提供了请求和响应?http
命令将此作为请求发送:
GET /en-gb HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: www.mrporter.com
User-Agent: HTTPie/1.0.3
主机的初始响应包括(以及许多其他内容):
HTTP/1.1 301 Moved Permanently
Connection: keep-alive
Content-Length: 0
Date: Tue, 23 Feb 2021 14:09:22 GMT
Location: /en-gb/
http
命令然后像这样跟随重定向(同样,为了使事情更容易,省略了细节):
GET /en-gb/ HTTP/1.1
Accept: */*
它返回屏幕fine