Java,简单 HTTP 客户端上的 "URI can' t be null"错误

标签 java http uri

我正在尝试编写一个简单的 HTTP 客户端,给定一个绝对 HTTP 路径,执行一个简单的 HTTP GET 请求并将内容打印到标准输出。

但是,我在尝试加载的任何页面上都收到以下错误:

    java.lang.IllegalArgumentException: URI can't be null.
    at sun.net.spi.DefaultProxySelector.select(DefaultProxySelector.java:141)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:926)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:850)
    at HTTrack.main(HTTrack.java:68)

引发异常的代码是:

try
{
    System.out.println("We will attempt to read " + getfilepath(args[0]) + " from " + getbasesite(args[0]));
    URL serverConnect = new URL("http", getbasesite(args[0]), getfilepath(args[0]));
    con = (HttpURLConnection)serverConnect.openConnection();
    con.setRequestMethod("GET");    
    con.setDoOutput(true);
    con.setReadTimeout(10000);
    System.out.println("Attempting to connect to " + getbasesite(args[0]) + " on port 80...");
    System.out.println("URL = " + con.getURL());
    con.connect();
    //System.out.println("Connection succeeded! Attempting to read remote file " + getfilepath(args[0]));
    BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String line = "";
    while((line = br.readLine()) != null)
    {
        System.out.println(line);
    }

}

引发异常 (HTTrack.java:68) 的行是 con.connect() 行,函数 getbasesitegetfilepath 分别返回 URL 的服务器主机名和远程文件路径。

例如,如果传递字符串 http://www.somesite.com/somepage.htmlgetbasesite 将返回 "www.somesite.com"getfilepath 将返回 "/somepage.html"。我知道 HttpURLConnection 正在正确传递这些值,因为当我调用 getURL 时,它返回我期望的内容:http://www.somesite.com/somepage。 html

我对可能导致此错误的原因感到困惑 - 我已经测试过 HttpURLConnection 类确实从构造函数参数中使用 System.out 行获取了正确的 URL .println("URL = "+ con.getURL());,所以我不确定为什么尝试连接失败并出现“URI 不能为空”的错误。

最佳答案

尝试删除您的 con.setDoOutput(true); 或将其设置为 false。该行告诉您的连接您将使用它来写入输出,但稍后您将通过调用 con.getInputStream() 从流中读取数据。

关于Java,简单 HTTP 客户端上的 "URI can' t be null"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26004977/

相关文章:

java - 如何在 for 循环中捕获计数器的特定值

php - 简单的 PHP 图像移动

xml - Perl 通过 HTTP 解析 XML 文件并增加几行

java - 验证 URI 是有效的 http URI

c# - 使用Uri处理.wav文件

c# - 从 Saxon 9.4he 中的嵌入式资源加载 xml 和 xslt

java - 实例类更改何时在 GAE 应用程序中生效?

java - 用于创建钱包的 orapki 命令行实用程序不起作用

java - 如何在 SharedPreferences 中存储和检索 Location 对象?

http - 如何让 Wireshark 显示我的本地 HTTP 流量?