我想從HttpURLConnection得到響應,但它拋出java.io.FileNotFoundException。HttpURLConnection響應不同於捲曲響應
HttpURLConnection類:
/**
* Call URL using HttpURLConnection
*
* @param url - the URL to be called
**/
public static String getHUCResponse(String url) throws IOException {
InputStream inps = null;
String res = "";
try {
URL getURL = new URL(url);
HttpURLConnection huc = (HttpURLConnection) getURL.openConnection();
huc.setConnectTimeout(60000); // 1 minute
huc.setReadTimeout(60000); // 1 minute
huc.setRequestMethod("GET");
inps = huc.getInputStream(); // throws java.io.FileNotFoundException
res = IOUtils.toString(inps,"UTF8");
}
catch (IOException except){
throw except;
}
finally {
IOUtils.closeQuietly(inps);
}
return res;
}
錯誤跟蹤:
java.io.FileNotFoundException: url
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1401)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at HttpUtils.getHUCResponse(HttpUtils.java:440)
捲曲:
$ curl url
user not found
$ curl -I url
HTTP/1.1 404 Not Found
Server: nginx/1.4.2
Date: Sat, 26 Oct 2013 23:45:20 GMT
Content-Length: 14
Connection: keep-alive
我有望獲得 「用戶未找到」 從HttpURLConnection的響應,因爲這是什麼正在返回404錯誤。
我可能會錯過什麼?
謝謝。
我添加了錯誤跟蹤。調用getErrorStream意味着添加對響應代碼的檢查。在Java中有沒有一種方法可以得到curl返回的響應,無論返回碼如何? IOUtils來自不同的Apache包,但它不是問題的原因。 –
它可能是因爲你告訴它處理inputstream實際上是null ... curl是一個命令行工具,它與你在java中做什麼無關。 有許多庫可以在java中使用,這是關於HttpURLConnection的,在這種情況下,no,響應將在getErrorStream或getInputStream中,具體取決於狀態代碼以及響應中是否實際存在主體。 – fd8s0
錯誤不是來自IOUtils。即使我刪除了IOUtils上的一行,也會拋出它。但你對getErrorStream是正確的。我可能需要使用與HttpURLConnection不同的東西(它的行爲與curl類似)。 –