HttpWebResponse "SeeOther" StatusCode возвращается вместо 404 - PullRequest
0 голосов
/ 11 июля 2011

Я делаю веб-запрос, который должен вернуть код состояния 404, так как URL не существует, но вместо этого он возвращает статус 303 (SeeOther). Если я смотрю на URL, он возвращается как URL перенаправления:

http://guide.opendns.com/?url=www.googuaoeuaoeu23p2le.com

Кто-нибудь знает, как я могу предотвратить это и увидеть raw 404 без переадресации openDNS?

Мой код:

        // create the HttpWebRequest object
        HttpWebRequest request = WebRequest.Create("www.googuaoeuaoeu23p2le.com") as HttpWebRequest;

        // don't allow redirect
        request.AllowAutoRedirect = false;

        request.Method = "GET";
        request.AllowWriteStreamBuffering = true;
        request.KeepAlive = false;
        request.ContentType = "application/x-www-form-urlencoded";
        request.SendChunked = false;
        request.Credentials = CredentialCache.DefaultCredentials;
        request.UserAgent = "NetMonitor";

        // set the timeout
        request.Timeout = 5000;

            // get the data as an HttpWebResponse object
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;

            // convert the data into a string (assumes that we are requesting text)
            StreamReader responseReader = new StreamReader(response.GetResponseStream());

            // get HTML from the response
            string responseHTML = responseReader.ReadToEnd();

            // close the response reader
            responseReader.Close();

            // at this point we successfully got a response and just need to determine what type -- get status code
            HttpStatusCode statusCode = response.StatusCode;

1 Ответ

0 голосов
/ 11 июля 2011

Не используете OpenDNS?Это легкомысленный ответ, но это недостаток использования OpenDNS.Они никогда не возвращают хост, не найденный необходимым для веб-клиента, чтобы обнаружить 404.

Хотя, если вы получаете ответ от OpenDNS, это означает, что ваш клиент не может найти сервер.404 будет исходить от сервера, как только вы подключитесь к нему, и он не сможет найти запрошенный вами ресурс.

Вам потребуется изменить код, чтобы сначала выполнить поиск DNS - посмотрите System.Net длякласс dnslookup - и возвращает 404, если поиск не удался.

На самом деле сейчас происходит следующее:

  • Ваш веб-клиент выполняет поиск DNS по предоставленному имени хоста
  • .Сбой поиска DNS
  • OpenDNS перехватывает ошибку и возвращает IP-адрес своих серверов
  • их серверы, а затем возвращает ответ на поиск вашего исходного имени хоста вместе с кодом продолжения.

Вам необходимо выполнить следующие сценарии

  • вы выполняете поиск DNS по имени хоста
  • хост не существует, поэтому вы возвращаете 404

или

  • вы выполняете поиск DNS по имени хоста
  • хост существует, поэтому вы делаете запрос
  • хост не может найти запрошенный путь, поэтому возвращается404
  • вы возвращаете 404

или

  • вы делаете поиск DNS по имени хоста
  • хост существует, поэтому вы делаетеrequest
  • путь существует, и хосты возвращают запрошенные данные.
  • вы возвращаете это своему клиенту
...