Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇语;URI可以';“不能为空”;简单HTTP客户端出错_Java_Http_Uri - Fatal编程技术网

Java 爪哇语;URI可以';“不能为空”;简单HTTP客户端出错

Java 爪哇语;URI可以';“不能为空”;简单HTTP客户端出错,java,http,uri,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.proto

我试图编写一个简单的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()
行,函数
getbasesite
getfilepath
分别返回URL的服务器主机名和远程文件路径

例如,如果传递了字符串
http://www.somesite.com/somepage.html
getbasesite
将返回
“www.somesite.com”
getfilepath
将返回
“/somespage.html”
。我知道
HttpURLConnection
正在正确地传递这些值,因为当我调用
getURL
时,它会返回我所期望的:
http://www.somesite.com/somepage.html


我一直想知道是什么导致了这个错误-我已经测试过
HttpURLConnection
类确实从构造函数参数中获取了正确的URL,行为
System.out.println(“URL=“+con.getURL()),因此我不确定为什么连接失败,错误是“URI不能为null”。

尝试删除
con.setDoOutput(true)
或将其设置为
false
。这一行告诉你的连接你将使用它来写输出,但是随后你通过调用
con.getInputStream()

从流中读取数据。当然,我已经解决了这个问题,但是在
getInputStream
调用上方的一行出现了异常。你能添加什么
System.out.println(“URL=”+con.getURL())你已经测试过了吗?我遇到了完全相同的问题。你找到原因了吗?我可以通过curl很好地获得URL,所以这方面没有问题。