2011-06-24 20 views
6

Bir IP kameradan HTTP kullanarak görüntü almaya çalışıyorum. Kamera, HTTP temel kimlik doğrulaması gerektirir, bu yüzden gelen istek başlığı eklemek zorunda:Bir URL nesnesinde özel HTTP isteği başlıklarını ayarlama çalışmıyor

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")); 

Tahmin edebileceğin gibi sonradan, ImageIO.read() için url nesneyi geçirerek ve am ben her ne kadar, 401 Yetkisiz bir HTTP alıyorum user ve pass doğrudur.

Neyi yanlış yapıyorum?

Ayrıca, new URL("http://user:[email protected]/snapshot.jpg")'u da denedim, ancak bu da çalışmıyor. java.net.HttpURLConnection uzanan sınıf sun.net.www.protocol.http.HttpURLConnection, aşağıdaki yöntem getRequestProperty(String key) olarak

cevap

1

Sorun çözüldü. Çalışmıyordu çünkü url'u ImageIO.read()'a geçiriyordum.

Bunun yerine, uc.getInputStream() geçişi çalışmayı başardı.

3

hassas güvenlik talep ederken null dönmek geçersiz kılınmıştır. Eğer uc.getRequestProperty("Authorization") üzerinde null yaşıyorsanız yüzden bu

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

: Burada

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 için beyanıdır. Apache'den HttpClient kullanmayı denediniz mi?

+0

Teşekkür ederim, şimdi 'null' olma nedenini anlıyorum. Ama neden HTTP 401'i döndürüyor? "Yetkilendirme" özelliğinin hiç ayarlanmamış olması mümkün mü? –

+0

@Blagovest Buyukliev, eğer HttpURLConnection öğesini genişletirse, o zaman "HttpURLConnection" 'a atayın ve 'getErrorStream()' diyerek hatanın 'InputStream'i alın. Bu, HTTP 401 hatasının iletisini içerir. Bunun dışında sana yardım edemem. –

0

URLConnection veya HttpURLConnection alt sınıflarını denediniz ve getRequestProperty() yöntemini geçersiz kıldınız mı?

+0

HttpURLConnection uc = (HttpURLConnection) url.openConnection() 'ı denedim, ancak sonuç aynı. Sorunum aslında getRequestProperty' ile değil, yetkisiz Yetkilendirme başlığında değil. –

+0

daha sonra 'openConnection' yöntemini geçersiz kılabilir mi? –