java – URL可以使用浏览器访问,但是仍然是具有URLConnection的FileNotFoundException

前端之家收集整理的这篇文章主要介绍了java – URL可以使用浏览器访问,但是仍然是具有URLConnection的FileNotFoundException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用HttpURLConnection连接到一个网站,并收到一个ResponseCode = 404(HTTP_NOT_FOUND).但是,我的浏览器(IE)中打开网站没有问题.

为什么有区别,我能做些什么呢?

问候,帕潘

这是我的节目

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class TestGet {
    private static URL source;

    public static void main(String[] args) {
        doGet();
    }

    public static void doGet() {
        try {
            source = new URL("http://localhost:8080/");

            System.out.println("Url is" + source.toString());

            URLConnection connection = source.openConnection();
            connection.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
            connection.setRequestProperty("Accept","*/*");
            connection.setDoInput(true);
            connection.setDoOutput(true);

            System.out.println(((HttpURLConnection) connection).getResponseCode());
            BufferedReader rdr = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            StringBuffer b = new StringBuffer();
            String line = null;
            while (true) {
                line = rdr.readLine();
                if (line == null)
                    break;
                b.append(line);
            }

        } catch (Exception e) {
            e.printStackTrace();
            System.err.println(e.toString());
        }
    }

}

堆栈跟踪

Url ishttp://localhost:8080/
404
java.io.FileNotFoundException: http://localhost:8080/
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at TestGet.doGet(TestGet.java:28)
    at TestGet.main(TestGet.java:11)
Caused by: java.io.FileNotFoundException: http://localhost:8080/
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at TestGet.doGet(TestGet.java:26)
    ... 1 more
java.io.FileNotFoundException: http://localhost:8080/

解决方法

您的404错误意味着没有找到请求的响应.首先,您需要确保在http:// localhost:8080 /上提供服务器,并且必须以代码200返回一些内容.如果没有,那么我们无法帮助您.

测试网址是否存在任何东西的最简单的方法是将网址粘贴到Web浏览器地址栏上,然后单击.但是,这并不能保证Java代码能够访问它.例如,如果服务器被设计为响应404,如果它找不到web浏览器User-Agent头.

由于服务器返回200或404的状态码,因此这不是防火墙问题.

根据您的最新版本的问题,您可以使用Web浏览器查看它,但无法使用您的java代码下载它,并且标题似乎设置正确.我只能看到两个问题:

>你不应该设置connection.setDoOutput(true);真实这将强制连接进行HTTP POST而不是GET,并且服务器可能不支持POST.
>您的服务器可能总是返回404,即使它应该是200.由于Web浏览器不关心错误状态,并尝试呈现所有的内容,所以它似乎是从Web浏览器工作.如果是这样,您应该首先修复服务器来正确响应,否则尝试获取错误流,而不是HttpURLConnection#getErrorStream()

猜你在找的Java相关文章