对于不存在的URL,Java HTTP getResponseCode返回200
我期待这段代码返回404,但它会产生输出:
“响应代码是200”
是否有可能学习如何区分现有和不存在的网页。 。 。 非常感谢,
try { // create the HttpURLConnection URL url = new URL("http://www.thisurldoesnotexist"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); System.out.println("Response code is " + connection.getResponseCode()); }
编辑:我看到你调用openConnection()
而不是connect()
– 这可能是问题吗? 我希望 getResponseCode()
实际发出请求,如果它还没有,但值得尝试…
这表明你可能有一些DNS解析器重定向到“帮助者”(垃圾邮件)页面,或类似的东西。
查看这里究竟发生了什么的最简单方法是使用Wireshark – 将其设置为捕获流量(仅限HTTP,使生活更轻松),然后运行代码。 你应该能够看到正在发生的事情。
请注意,我不会期望404 – 因为这将涉及能够找到要与之交谈的Web服务器。 如果您尝试转到不涉及的主机,则根本不应该有HTTP响应。 我希望connect()
抛出exception。
尝试添加“connection.connect();” 或者查看返回的内容……
它可能是一个dns问题,即:你的dns被送到停车场……例如:freedns这样做。
你可以:
- 从页面主机解析IP
- 尝试使用普通套接字连接到已解析IP上的端口80
但这有点低,并且会增加复杂性,因为您需要通过套接字发出简单的GET请求。 然后validation响应,以确保它实际上是在端口80上运行的HTTP服务器。
NMap或许可以帮到你。
理想情况下,您应该收到此错误:
java.net.UnknownHostException: www.thisurldoesnotexist
但看起来您的DNS由DNS提供商解决。
例如,在我公司的网络上运行带有URI的代码“http:// profile /”显示员工档案。
如果您在Windows上检查是否有任何设置,请检查等文件。
像@spgennard一样 – 我认为这很可能是一个DNS问题。
- 您选择的URL由DNS投机者拥有。
- 您选择的URL由DNS提供商“驻留”。
- 您的ISP正在弄乱您的DNS结果,将您的浏览器发送到某个搜索页面。
您也可能通过代理访问Web,代理正在做一些奇怪的事情。
诊断此问题的方法是查看您获得的HTTP响应中的其他信息,尤其是响应正文。