7

HTTP を使用して IP カメラから画像を取得しようとしています。カメラには HTTP 基本認証が必要なので、対応する要求ヘッダーを追加する必要があります。

URL url = new URL("http://myipcam/snapshot.jpg");
URLConnection uc = url.openConnection();
uc.setRequestProperty("Authorization", 
  "Basic " + new String(Base64.encode("user:pass".getBytes())));

// outputs "null"
System.out.println(uc.getRequestProperty("Authorization"));

後でurlオブジェクトをに渡します。ご想像のとおりImageIO.read()、HTTP 401 Unauthorized を取得していますが、userpassは正しいです。

私は何を間違っていますか?

私も試しましnew URL("http://user:pass@myipcam/snapshot.jpg")たが、それもうまくいきません。

4

3 に答える 3

3

sun.net.www.protocol.http.HttpURLConnection拡張するクラスでは、セキュリティ上の機密情報を要求するときjava.net.HttpURLConnectionに、次のメソッドgetRequestProperty(String key)がオーバーライドされて返されます。null

public String getRequestProperty(String key) {
    // don't return headers containing security sensitive information
    if (key != null) {
        for (int i = 0; i < EXCLUDE_HEADERS.length; i++) {
        if (key.equalsIgnoreCase(EXCLUDE_HEADERS[i])) {
            return null;
        }
        }
    }
    return requests.findValue(key);
}

これがの宣言ですEXCLUDE_HEADERS

// the following http request headers should NOT have their values
// returned for security reasons.
private static final String[] EXCLUDE_HEADERS = {
    "Proxy-Authorization", "Authorization" };

それがあなたがnullオンになっている理由ですuc.getRequestProperty("Authorization")。ApacheからHttpClientを使用してみましたか?

于 2011-06-24T15:03:30.767 に答える
2

問題は解決された。urlに渡していたのでうまくいきませんでしたImageIO.read()

代わりに、渡すuc.getInputStream()ことで機能しました。

于 2011-06-27T09:00:37.980 に答える
0

メソッドをサブクラス化URLConnectionまたはHttpURLConnectionオーバーライドしようとしましたgetRequestProperty()か?

于 2011-06-24T15:13:49.833 に答える