HttpWebRequests使用WebProxy工作然后失败

use*_*871 13 .net c# windows proxy tcp

奇怪的情况我在这里,不幸的是我不太了解netstat之外的Windows网络方面:

所以我有一个我在浏览器中配置的代理(Firefox 42),并且正在运行一个简单的应用程序,它通过URL循环以通过该代理调用它们.此代理具有凭据以便使用它,我知道代理工作.这是一个Windows 7的盒子.

因此,在此过程中的某个时刻,会发生以下情况:

  1. 浏览器调用只是超时.它根本不要求凭据.(当问题消失时,它又开始要求提供凭据).
  2. 无论超时是什么(7秒,20秒等),都会在应用程序超时中调用

我已经确认了以下内容:

  1. 在我的.net应用程序中,我100%知道我正在关闭每个网络对象,甚至在我读取响应后中止了请求对象.
  2. 经过一段时间,没有任何电话,问题就消失了.
  3. 当我在另一台服务器上使用此代理时,它100%有效.所以我知道它与我使用的服务器和代理IP地址有关.
  4. 我查看了资源管理器,并没有打开很多活动的TCP连接.虽然我不知道这是否意味着什么.
  5. 如果我使用另一个代理,这个代理工作.这就像它的IP特定,令我感到困惑,因为它只是代码中的Web代理对象.

什么会导致这个?它通常在使用代理进行4-7次调用后发生,并在30-40分钟后释放问题.

编辑7:

AWS实例也会发生这种情况.试过这种方法.ZZZ ...

编辑6:

服务器重启也不会消失.您可以重新启动,15分钟后SAME代理超时.最终再次运作.

编辑5:

用Java和Python写了一个类似的测试.结果相同.

编辑4:这是它的工作原理:

Call to Proxy 1... Good!
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Good!
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Timeout...
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Timeout...
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Timeout...
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Timeout...
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Timeout...
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Timeout...
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Timeout...
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Timeout...
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Timeout...
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Timeout...
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Call to Proxy 1... Good!
Call to Proxy 2... Good!
Call to Proxy 3... Good!
Call to Proxy 4... Good!
Run Code Online (Sandbox Code Playgroud)

编辑3:这些问题似乎非常相似:Http Post WebRequest超时

HttpWebRequest和GetResponse在1个请求后挂起; 其他解决方案对我不起作用

WebRequest.GetResponse锁定了吗?

HttpWebRequest在第二次调用时超时

编辑2:看看Wireshark,我看到代理信息中的TCP传输受到影响.但是,与其他代理同时发生的情况不是这样吗?来自代理服务器本身的是什么?这对我来说没有意义,因为我甚至没有得到回复,而且请求甚至没有被处理.

编辑:为代码中的调用添加代码.这个方法在while循环中一遍又一遍地调用:

            String html = null;

        HttpWebRequest request = null;
        WebProxy webProxy = null;

        try
        {
            request = (HttpWebRequest)WebRequest.Create(url);

            webProxy = new WebProxy(proxyIP, proxyPort);
            webProxy.Credentials = new NetworkCredential(proxyUser, proxyPass);

            request.Proxy = webProxy;
            request.KeepAlive = false;
            request.Timeout = 5000;
            request.ReadWriteTimeout = 5000;
            request.Method = "GET";
            request.UserAgent = generateAgentString();

            using (WebResponse resp = (WebResponse)request.GetResponse())
            {
                using (Stream strm = resp.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(strm, Encoding.UTF8);

                    try
                    {
                        html = reader.ReadToEnd();
                    }
                    catch
                    {
                        Console.WriteLine("Failed");
                        html = null;
                    }
                    finally
                    {
                        strm.Flush();
                        reader.BaseStream.Dispose();
                        reader.Dispose();
                        strm.Dispose();
                        resp.Dispose();
                    }
                }
            }

            if (request != null)
            {
                request.Abort();
            }
        }
        catch(Exception e) { Console.WriteLine(e); }
Run Code Online (Sandbox Code Playgroud)

use*_*871 1

经过多次挖掘 - 我再次回到代理提供商那里,带着一堆跟踪信息和挖掘结果......奇迹般地......他们已经决定他们实际上确实有一些限制,但他们没有向购买者透露。

令人震惊。我更生气的是,在最初与他们讨论并获得干净的账单和他们的健康之后,我走了这么远。

如果有人需要建议提供商不要使用:)