Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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 使用番石榴';要从HTTP服务读取的s Resources.readLines_Java_Http_Url_Guava - Fatal编程技术网

Java 使用番石榴';要从HTTP服务读取的s Resources.readLines

Java 使用番石榴';要从HTTP服务读取的s Resources.readLines,java,http,url,guava,Java,Http,Url,Guava,我想从解析为HTTP服务的URL中读取readLines。我可以用 Resources.readLines(url, Charsets.SOMETHING) 来自com.google.common.io 这是可行的,但是资源类javadoc声明了以下内容,没有进一步解释: 请注意,即使这些方法使用URL参数,它们通常也不适用于HTTP或其他非类路径资源 为什么此方法不适合读取HTTP服务,推荐的方法是什么?使用URL发送HTTP请求时,典型的过程是 URL url = new URL(some

我想从解析为HTTP服务的URL中读取
readLines
。我可以用

Resources.readLines(url, Charsets.SOMETHING)
来自
com.google.common.io

这是可行的,但是资源类javadoc声明了以下内容,没有进一步解释:

请注意,即使这些方法使用URL参数,它们通常也不适用于HTTP或其他非类路径资源


为什么此方法不适合读取HTTP服务,推荐的方法是什么?

使用
URL
发送HTTP请求时,典型的过程是

URL url = new URL(someStringUrl);
HttpUrlConnection con = (HttpUrlConnection) url.openConnection();
// do some stuff with con, add headers, add request body, etc.
con.getInputStream(); // get body of response
提供给
资源的
URL
跳过了所有这些。
Resources
中的方法依赖于
URL#openStream()
,它跳过对
URLConnection
的任何修改,即与
URL.openConnection().getInputStream()等效。您可能会从HTTP响应中获得任意数量的400级错误代码,因为您的请求不正确


这不会发生在类路径资源中,因为协议很简单。您只需复制字节。

这一点很好。实际上,我只尝试在一个不需要头的简单服务上获取请求。因此,我假设一个
CharSource
包装一个
ByteSource
创建并准备连接,然后返回
connection.getInputStream()
。(包装在这里可以让你选择一个字符集。)@Joekerney对于HTTP请求,我真的建议你使用一个完整的HTTP客户端。@Joekerney:是的,如果你想从HTTP URL读取,并且你想能够使用Guava的I/O实用程序,一个打开连接的
ByteSource
,可以根据需要进行设置,然后用
openStream()
方法连接并返回输入流。@ColinD当我们有你在这里时,Google是否有一个公开可用的HTTP客户端?