Java HTTP getResponseCode为不存在的URL返回200

Java HTTP getResponseCode为不存在的URL返回200,java,networking,Java,Networking,我希望这段代码返回404,但它会产生以下输出: “响应代码为200” 是否有可能学习如何区分存在和不存在的网页。非常感谢 try { // create the HttpURLConnection URL url = new URL("http://www.thisurldoesnotexist"); HttpURLConnection connection = (HttpURLConnection) url.openConnection();

我希望这段代码返回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解析程序,可以重定向到“助手”(垃圾邮件)页面或类似的页面

要准确了解这里发生了什么,最简单的方法是使用——启动并捕获流量(仅限HTTP,以简化工作),然后运行代码。你应该能看到那边发生了什么

请注意,我并没有想到会出现404,因为这需要找到一个web服务器来开始对话。如果您试图转到一个不涉及的主机,那么根本不应该有HTTP响应。我希望
connect()
抛出异常。

尝试添加“connection.connect();”或查看返回的内容

这可能是一个dns问题,即:您的dns正在被发送到一个停车场。。。例如:freedns可以做到这一点。

您可以:

  • 从页面的主机解析IP
  • 尝试使用普通套接字连接到已解析IP上的端口80
  • 然而,这是一个有点低的级别,并且会增加复杂性,因为您需要通过套接字发出一个简单的GET请求。然后验证响应,确保它实际上是在端口80上运行的HTTP服务器


    可能可以在这里帮助您。

    像@spgennard-我认为这很可能是DNS问题

    • 您选择的URL归DNS投机者所有
    • 您选择的URL由DNS提供商“驻留”
    • 您的ISP正在干扰您的DNS结果,以便将您的浏览器发送到某个搜索页面
    也可能是您通过代理访问web,而代理正在执行一些奇怪的操作


    诊断此问题的方法是查看您得到的HTTP响应中的其他信息,特别是响应正文。

    理想情况下,您应该得到以下错误:

    java.net.UnknownHostException: www.thisurldoesnotexist
    
    但看起来您的URL已由DNS提供商解析

    例如,在我公司的网络上,使用URI运行代码”http://profile/“显示 员工档案


    如果您在windows上,请同时检查etc.home文件,以检查是否有任何设置已更改。

    如果您返回了200,则该页面确实存在…请尝试
    http://www.fackurl.com
    看看你得到了什么,也许你会得到例外