Java 使用番石榴';要从HTTP服务读取的s Resources.readLines
我想从解析为HTTP服务的URL中读取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
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客户端?