2

我不知何故一直认为这应该是可能的:本地文件系统中的Apache httpclient GET文件?

val client = HttpClients.createDefault() 
val httpGet = new HttpGet("file:///Users/user01/testfile") 
client.execute(httpGet) 

会抛出:

client: org.apache.http.impl.client.CloseableHttpClient = [email protected] 
httpGet: org.apache.http.client.methods.HttpGet = GET file:///Users/user01/testfile HTTP/1.1 
org.apache.http.client.ClientProtocolException: URI does not specify a valid host name: file:///Users/user01/testfile 
    at org.apache.http.impl.client.CloseableHttpClient.determineTarget(test_ws.sc0.tmp:90) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(test_ws.sc0.tmp:78) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(test_ws.sc0.tmp:103) 
    at #worksheet#.#worksheet#(test_ws.sc0.tmp:6) 

哪一种有意义的,因为我创造一个HttpGet实例。

有没有人知道如何做到这一点?

+0

我会说** HTTP **客户端被设计为使用** HTTP **协议,使用其他工具用于其他协议(文件,FTP,...)。 –

+0

我在Mac上,但文件/ Users/user01/testfile确实存在。 –

+0

也许你想要使用一个URL:// [像这样](http://stackoverflow.com/a/1485737/4136325) –

回答

0

如何使用内置的java.net.URL类?这可以处理http和文件协议。

+0

无论是...我可以看到httpclient在内部试图提取主机,所以也许毕竟这是不可能的 - target = URIUtils.extractHost(requestURI); –

+0

但我确定我已经完成了这个过去,但也许有一些类型的Spring包装: –

+0

这只是适合我: public static void main(String [] a)抛出异常{ URL url = new URL( “文件:/// tmp目录/ foo” 的); InputStreamReader reader = new InputStreamReader((InputStream)url.getContent(),Charset.defaultCharset()); BufferedReader buffReader = new BufferedReader(reader); 弦线; StringBuilder strBuilder = new StringBuilder(); ((line = buffReader.readLine())!= null){ strBuilder.append(line); } System.out.println(strBuilder.toString()); \t} – erosb

2

奇怪的是,HttpClient是客户端HTTP传输库。它不支持任何其他传输协议。甚至没有本地文件系统。你可能想要的是Apache Commons VFS或类似的东西。