Я пытаюсь получить прокси для веб-запроса (HttpWebRequest или веб-клиент). В панели управления->Свойства обозревателя->Подключения->Настройки локальной сети вы увидите 3 варианта:

  1. Автоматически определять настройки
  2. Использовать сценарий автоматической настройки
  3. Используйте прокси-сервер для вашей локальной сети

Я хочу убедиться, что независимо от настроек мой веб-запрос использует тот же прокси-сервер, что и браузер.

Я использую приведенный ниже код для достижения этой цели; однако, когда 1. проверено, я пробую тот же URL-адрес в браузере и в своем коде, похоже, мой код работает намного медленнее. Я предполагаю, что способ, которым я получаю прокси в коде, может быть неэффективным или неуместным.

Могу ли я что-нибудь изменить в своем коде, чтобы отразить скорость браузера?

    var client = (HttpWebRequest)WebRequest.Create(uriStr);
    client.Headers["something"] = something;
    client.Timeout = ConnectionTimeOut; //1 min 

    var proxyURI = WebRequest.GetSystemWebProxy().GetProxy(uri);
    var proxy = new WebProxy(proxyURI, true)
    {
        Credentials = CredentialCache.DefaultNetworkCredentials
    };
    //if there is no proxy, proxy will return the same uri
    //do we need check if client.Proxy is null or not,
    if (proxyURI != null && !string.IsNullOrEmpty(proxyURI.AbsoluteUri) && !proxy.Address.Equals(uri))
    {
        client.Proxy = proxy;
    }
4
toosensitive 15 Дек 2011 в 19:49
Отследите HTTP-пакеты с помощью WireShark (или Fiddler) в обоих случаях и сравните трассировки.
 – 
kol
15 Дек 2011 в 20:00

1 ответ

Ваш подход в порядке.

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

Пробовали ли вы последующие запросы в своем приложении после получения прокси/учетных данных?

2
Aaron McIver 15 Дек 2011 в 19:55