Подтвердить что ты не робот

HttpWebRequests с использованием WebProxy работают, а затем сбой

Нечеткая ситуация у меня здесь, и, к сожалению, я не очень разбираюсь в сетевой стороне Windows за пределами netstat:

Итак, у меня есть прокси-сервер, который я настроил в своем браузере (Firefox 42), и я запускаю простое приложение, которое перебирает URL-адреса, чтобы называть их через этот прокси-сервер. Этот прокси имеет учетные данные, чтобы использовать его, и я знаю, что прокси работает. Это окно Windows 7.

Итак, в какой-то момент во время этого процесса происходит следующее:

  • Браузер вызывает просто тайм-аут. Он не запрашивает учетные данные вообще. (когда проблема исчезнет, ​​он снова начнет запрашивать учетные данные).
  • Вызов тайм-аута приложения независимо от тайм-аута (7 секунд, 20 секунд и т.д.)

Я подтвердил следующее:

  • В моем приложении .net я 100% знаю, что закрываю каждую сеть объект, и я даже прервал объект запроса после того, как прочитал ответ.
  • Через некоторое время, без каких-либо вызовов, проблема уходит.
  • Когда я использую этот прокси-сервер на другом сервере, он 100% работает. Поэтому я знаю, что это связано с сервером, который я использую, и что IP-адрес прокси.
  • Я просмотрел диспетчер ресурсов, и открытых открытых TCP-соединений не существует. Хотя я не знаю, что это значит.
  • Если я использую другой прокси-сервер, этот прокси-сервер работает. Это похоже на IP-специфику, что меня озадачивает, потому что это просто веб-прокси-объект в коде.

Что может вызвать это? Обычно это происходит после 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!

Изменить 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); }
4b9b3361

Ответ 1

После долгих копаний я снова вернулся к прокси-провайдеру с кучей информации о трассировке и копал результаты и... чудом... они решили, что у них действительно есть ограничения, которые они не раскрыли покупатель.

Shocker. Меня больше раздражает. Я пошел так далеко, после того, как сначала обсудил с ними и получил чистый счет здоровья на их конце.

Если кому-то нужна рекомендация для поставщика не использовать:)