2013-10-27 102 views
0

我想從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錯誤。

我可能會錯過什麼?

謝謝。

回答

1

當錯誤代碼爲400或更高時,您將得到輸入流的響應getErrorStream而不是getInputStream(是的,我知道,有人認爲這將是一個好主意莫名其妙)。

當你調用getInputStream但代碼是400或更高,那麼我想我記得在這種情況下得到空值,但它似乎讓你一個FileNotFoundException,你只需要添加一個檢查getResponseCode()並使用正確的方法來獲取流。

+0

我添加了錯誤跟蹤。調用getErrorStream意味着添加對響應代碼的檢查。在Java中有沒有一種方法可以得到curl返回的響應,無論返回碼如何? IOUtils來自不同的Apache包,但它不是問題的原因。 –

+0

它可能是因爲你告訴它處理inputstream實際上是null ... curl是一個命令行工具,它與你在java中做什麼無關。 有許多庫可以在java中使用,這是關於HttpURLConnection的,在這種情況下,no,響應將​​在getErrorStream或getInputStream中,具體取決於狀態代碼以及響應中是否實際存在主體。 – fd8s0

+0

錯誤不是來自IOUtils。即使我刪除了IOUtils上的一行,也會拋出它。但你對getErrorStream是正確的。我可能需要使用與HttpURLConnection不同的東西(它的行爲與curl類似)。 –

0

上午,Java正在做事。 404 http代碼等於FileNotFoundExceptionuser not found是奇怪的錯誤消息,你永遠不會看到從HttpURLConnection