0

我在做一个网络请求应返回404个状态码,因为URL不存在,但它不是返回303(SeeOther)状态。如果我看的URL它返回的重定向URL,它是:HttpWebResponse“SeeOther”的StatusCode返回而不是404

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

有谁知道我怎样才能防止这种情况,看到了原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; 

回答

0

不要使用OpenDNS的?这是一个轻率的答案,但这是使用OpenDNS的缺点。他们从来没有返回未找到所需主机的Web客户端检测404

尽管如此,如果你得到从OpenDNS的响应,这意味着你的客户端无法找到服务器。一旦连接到服务器,404就会来自服务器&它无法找到您请求的资源。

你需要改变你的代码,首先做一个DNS查找 - 看在System.Net为dnslookup类 - 并返回404,如果查找失败。

什么实际发生现在的问题是:

  • 您的Web客户端不上提供的主机名的DNS查询
  • 的DNS查找失败
  • OpenDNS的拦截失败,并返回他们的服务器
  • 的IP地址
  • 自己的服务器,然后返回您最初的主机名的检索响应以及继续码。

需要发生什么,有以下几种scenerios

  • 你的主机名进行DNS查询
  • 主机不存在,因此返回404

  • 你对主机名做一个dns查找
  • 主机存在,所以你发出请求
  • 主机无法找到请求这样的路径返回404
  • 返回404

  • 你的主机名进行DNS查询
  • 主机存在,所以你让
  • 路径存在请求和主机返回的数据requeste d。
  • 您将此回复给您的客户端
+0

您知道如何禁用OpenDNS吗?它是我的DNS提供商的服务吗?我不知道。 –

+0

这是一个网络设置,既可以在机器上设置,也可以通过机器连接到的网络进行设置。但正如我所说的,要验证您要连接的主机名,您需要首先执行dns查找。这将通过或失败,然后你可以返回404. –

+0

我不认为DNS查找会削减它,因为它不仅仅是一个域 - 它可能是一个深层的URL,js文件等。 –

相关问题