首页 > 解决方案 > HTTPWebRequest 没有超时

问题描述

因此,我遇到的问题是,任何 GET 或 POST 请求,无论是使用 HttpWebRequest 还是 RestSharp 发出的,在使用错误代理进行请求时,在一定时间后都不会超时。我希望请求在一定时间后超时,并且在这两种情况下都应该有 100 秒的默认超时,因为 RestSharp 请求的默认超时是 HttpWebRequests 的默认超时。但这就是事情变得奇怪的地方。我的请求在 100 秒后没有超时,在将其显式设置为 5 秒后也没有超时。它只是等待响应并阻止整个程序。总结:请求无限等待响应。

我在 StackOverflow 和其他网站上做了一些研究,似乎以前没有人遇到过这个问题。我也无法使用针对类似问题的解决方案来解决它。没有给定解决方案的类似问题,您可以在这里找到C# RestSharp ignoring timeout parameter?
不同之处在于上面的用户仍然有一个可以正常工作的默认超时(这很奇怪,因为它是 21 秒)。
另一个用户使用相同的代码没有遇到问题,这也很奇怪,但可能会导致解决方案

System.Net.CookieContainer cookies = new System.Net.CookieContainer();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://www.google.de/?hl=de");

req.Timeout = 5000;
req.ReadWriteTimeout = 5000;
req.ContinueTimeout = 5000; //

string proxy = ""; //non working proxy here
req.Proxy = new WebProxy(proxy.Split(':')[0], Convert.ToInt32(proxy.Split(':')[1]));
req.Method = "GET";
req.CookieContainer = cookies;
req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0";
req.Referer = "";

HttpWebResponse resp = (HttpWebResponse)req.GetResponse();              
Console.WriteLine(resp.Content);

正如我所提到的,它应该在 5 秒后超时,并且没有在 100 秒后显式设置超时,但这两种情况都没有发生。编辑:我必须补充一点,当设置为 5 毫秒等低 amont 时,如果没有非工作代理,超时工作正常。然后它抛出一个 System.Net.WebException。

标签: c#.net

解决方案


推荐阅读