2009-01-26 16 views
26

Ich versuche, das Java-HTML-Dokument ein wenig zu verbessern, aber ich habe Probleme mit der HttpUrlConntion. Eine Sache ist, dass einige Server eine Anfrage blockieren, wenn der Benutzeragent eine Java VM ist. Ein weiteres Problem ist, dass die HttpUrlConnection nicht das Referrer oder Location Header-Feld setzt. Da mehrere Websites diese Felder verwenden, um zu verifizieren, dass der Inhalt von ihrer eigenen Site aus aufgerufen wurde, bin ich auch hier blockiert. Soweit ich sehen kann, ist die einzige Lösung, den URL-Handler des HTTP-Protokolls zu ersetzen. Oder gibt es eine Möglichkeit, den Standard-HTTP-Handler zu ändern?Wie man den Header einer HttpUrlConnection ändert

Antwort

42

Öffnen Sie die URL mit URL.openConnection. Optional zu HttpURLConnection gegossen. Rufen Sie URLConnection.setRequestProperty/addRequestProperty.

Der Standardwert für den User-Agent-Header wird über die Systemeigenschaft "http.agent" festgelegt. Mit PlugIn und WebStart können Sie diese Eigenschaft festlegen.

+10

Stellen Sie sicher, dass Sie gegebenenfalls zwischen addRequestProperty und setRequestProperty unterscheiden. Die Set-Variante überschreibt jeden vorhandenen Header mit demselben Schlüssel. Die add-Variante fügt eine zusätzliche Instanz der Kopfzeile hinzu, falls bereits eine vorhanden ist. – laz

+0

Fügt 'addRequestProperty' eine neue Zeile hinzu (mit anderen Worten, die Anfragen haben 2 Zeilen mit ** identischen ** Schlüsseln) oder fügt sie ein Komma und den neuen Wert an die bestehende Zeile an? – Pacerier

+0

@leoger Danke für die Hilfe = D – Pacerier

2

Wenn Sie Apache HttpClient verwenden, um Ihre programmatische HTTP-Konnektivität zu verwalten, erhalten Sie eine äußerst nützliche API, die das Erstellen von Verbindungen (und optional automatisches erneutes Verbinden bei fehlgeschlagen), Festlegen von Kopfzeilen, Posts vs Abrufen, praktische Methoden zum Abrufen des zurückgegebenen Inhalts und viel viel mehr.

+11

Ich weiß, dass dieser Beitrag alt ist, aber wenn jemand liest es: HttpURLConnection ist jetzt gegenüber HttpClient bevorzugt, siehe [dieser Blog-Beitrag] (http://android-developers.blogspot.com/2011/09/androids-http-clients. html) für Informationen. – kamituel

0

Ich löste mein Problem. Wir können den Header einfach an die Anwendung/json senden und den Body als JSON-Objekt übergeben. Das löst das Problem einfach.

Verwandte Themen