0

HttpURLConnection から応答を取得しようとしていますが、java.io.FileNotFoundException がスローされます。

HttpURL 接続:

/**
* 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

これは 404 エラーで返されるものであるため、HttpURLConnection からの応答として「ユーザーが見つかりません」を受け取ることを期待していました。

何が欠けている可能性がありますか?

ありがとう。

4

2 に答える 2

2

エラー コードが 400 以上の場合、応答の入力ストリームを取得するのでgetErrorStreamはなくgetInputStream(はい、知っています。誰かがこれを何らかの形で良いアイデアだと考えていました)。

getInputStream を呼び出してもコードが 400 以上の場合、その場合は null を取得したことを覚えていると思いますが、FileNotFoundException を取得しているようです。getResponseCode() のチェックを追加し、適切なメソッドを使用して取得するだけです。ストリーム。

于 2013-10-27T00:43:51.183 に答える
0

アム、Java は正しいことをしています。404 http コードはFileNotFoundException. user not foundあなたが決して見ることのない奇妙なエラーメッセージですHttpURLConnection

于 2013-10-27T01:19:23.830 に答える