Обнаружение ошибки HTTP-прокси для WebRequest
-
16-09-2019 - |
Вопрос
Как определить, что сбой веб-запроса произошел из-за ошибки веб-прокси, а не из-за ошибки целевого веб-сервера?
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, а затем проверить сообщение на наличие «прокси».
В сообщении будет сказано:
Имя прокси не удалось разрешить:'локальный хост'
Не связан с StackOverflow