Вопрос

Как определить, что сбой веб-запроса произошел из-за ошибки веб-прокси, а не из-за ошибки целевого веб-сервера?

try
{
    var request = (HttpWebRequest)WebRequest.Create("http://www.example.com");
    request.Proxy = new WebProxy("localhost");
    var response = request.GetResponse();

    return response.GetResponseStream();
}
catch(WebException webex)
{
    //Detect proxy failure
}
Это было полезно?

Решение

Это очень трудно.Вот несколько предложений:

  • Тот Самый webex.Response.ResponseUri свойство содержит URI вашего прокси-сервера, а не сервера, с которым вы пытались связаться.
  • Тот Самый webex.Response.StatusCode собственность - это та, которая всегда относится к проблеме прокси-сервера, например ProxyAuthenticationRequired.К сожалению, большинство статусов могут относиться либо к ошибке прокси-сервера, либо к ошибке сервера.
  • Тот Самый webex.Response.Headers коллекция содержит нестандартные записи, которые вы распознаете как созданные вашим прокси-сервером.Например, прокси-сервер Squid возвращает заголовок "X-Squid-Error", со своим собственным проприетарным набором статусов.
  • Тот Самый webex.Response.ResponseStream stream содержит HTML или обычное текстовое сообщение об ошибке в формате, который, как вы распознаете, сгенерирован вашим прокси-сервером.Вы можете проверить, содержит ли он URI вашего прокси-сервера.

В вашем блоке catch убедитесь, что вы регистрируете полную информацию о WebException объект, включающий в себя все свойства, упомянутые выше.Затем вы можете проанализировать данные журнала и разработать точный тест на наличие ошибок прокси-сервера.

Другие советы

Я думаю, вы могли бы уловить InvalidOperationException, а затем проверить сообщение на наличие «прокси».

В сообщении будет сказано:

Имя прокси не удалось разрешить:'локальный хост'

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top