2011-06-24 41 views
6

HTTPを使用してIPカメラからイメージを取得しようとしています。カメラは、HTTP基本認証を必要とするので、私は、対応するリクエストヘッダを追加する必要があります。URLオブジェクトにカスタム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")); 

私は後でImageIO.read()urlオブジェクトを渡しています、そして、あなたが推測できるように、私は不正なHTTP 401を得ています、が、 userpassは正しいです。

私は間違っていますか?

私もnew URL("http://user:[email protected]/snapshot.jpg")を試しましたが、それでも動作しません。 java.net.HttpURLConnectionを拡張するクラスsun.net.www.protocol.http.HttpURLConnection、以下の方法でgetRequestProperty(String key)

答えて

1

問題を解決しました。私がurlImageIO.read()に渡していたので、うまくいきませんでした。

代わりにuc.getInputStream()を渡すと機能します。

3

は、セキュリティ機密情報を要求するときnullを返すようにオーバーライドされました。

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

あなたはuc.getRequestProperty("Authorization")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の宣言です。あなたはApacheからHttpClientを使ってみましたか?

+0

ありがとうございました、今、私は 'null'を得る理由を理解しています。しかし、なぜHTTP 401を返しますか? 「Authorization」プロパティがまったく設定されていない可能性はありますか? –

+0

@Blagovest Buyukliev、 'ucがHttpURLConnection'を継承している場合は' HttpURLConnection'に型キャストし、 'getErrorStream()'を呼び出すことでエラーの 'InputStream'を取得します。これには、HTTP 401エラーのメッセージが含まれています。それ以外は、私はあなたを助けることはできません。 –

0

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

+0

私は 'HttpURLConnection uc =(HttpURLConnection)url.openConnection()'を試みましたが、結果は同じです。私の問題は、実際には 'getRequestProperty'ではなく、送信されていないAuthorizationヘッダーを伴います。 –

+0

これはおそらく 'openConnection'メソッドをオーバーライドしますか? –