Как я могу сделать AC # https веб-запрос, который работает как в прокси, так и без прокси-ситуаций

1

Этот код изменился, взломал, попробовал и попробовал, в настоящее время у меня есть свой веб-запрос, как показано, а затем раздел GetRequestStream() и GetResponse(). Это работает из-за нашего прокси-сервера, но из ноутбука на Wi-Fi не за прокси-сервером бит GetProxy возвращает ури, который был передан ему, это приводит к ошибке "ServicePointManager не поддерживает прокси-серверы https-схемы". Поэтому я попробовал, как показано ниже, чтобы установить прокси на пустой новый прокси-сервер, когда он соответствует пропущенному uri. Это приводит к тому, что процесс блокируется в течение хорошего времени, а затем возвращается "операция имеет тайм-аут ошибки". Если я поставил Fiddler на ноутбук, он будет действовать как прокси-сервер, поэтому код будет работать так же, как и в нашей сети, и все в порядке, поэтому скрипт меняет работу кода.

Я думаю, что ключ может быть в тайм-ауте проблемы во время GetRequestStream(), что он выбрасывает таймаут.

На ноутбуке нет настроек прокси-сервера, то есть или хром. Через браузер я могу без проблем получить доступ к веб-сайтам http и https (включая тот, который я получаю от этого кода).

Однако из моего кода С# я не могу заставить запрос https работать.

Если я изменю запросы на http, он работает нормально. (как в нашей сети за прокси, так и от ноутбука)

Пока ниже показан текущий код, который у меня есть, я попытался заменить все блоки кода, которые я нашел здесь, и различные блоги/руководства, не найдя рабочего решения.

Чтобы быть ясным, я получаю рабочее соединение на машинах за прокси-сервером как на https, так и на http. Я могу заставить его работать с не-прокси-ноутбуком при использовании http. ошибки возникают на ноутбуке без прокси-сервера при попытке получить соединение https.

        HttpWebRequest myWebRequest;
        myWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
        myWebRequest.CookieContainer = new System.Net.CookieContainer();

        if (myWebRequest.Proxy.GetProxy(new Uri(url)).ToString() == url)
        {
            myWebRequest.Proxy = new WebProxy();
        }
        else
        {
            string proxyuri = myWebRequest.Proxy.GetProxy(new Uri(url)).ToString();
            myWebRequest.Proxy = new WebProxy(proxyuri, true);
            myWebRequest.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
        }
        myWebRequest.UseDefaultCredentials = true;
Теги:
proxy
https
httpwebrequest

1 ответ

0
Лучший ответ

Хорошо, поэтому проблема, с которой я столкнулась, связана с настройками в apache на сервере. решение находится здесь.

HttpWebRequest.GetRequestStream() прерывает таймаут при подключении SSL под Windows 7/Vista

В основном вам необходимо убедиться, что имя сервера в ваших директивах apache соответствует адресу https вашего С# до www. часть.

Теперь я хотел бы знать, есть ли способ в коде С#, чтобы избежать или уловить это до вызова GetRequestStream(), который замерзает на 30 секунд, за которым следует исключение тайм-аута.

Как я могу это лучше понять?

  • 0
    Кен, уже давно, может быть, тебе удалось продвинуться вперед?
  • 0
    Нет, к сожалению. Я попробовал несколько методов обнаружения соединения, которые я гуглил, но все они не сработали при определенных обстоятельствах (прокси-серверы, отличающиеся ОС и т. Д.), Ожидая, когда соединение не установится, - это все равно, что я остался.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню