2009-05-08 9 views
1

Ich mag einen HTML-String mit einer GET-Anforderung wie diese mit Apachen senden Httpclient:Wie HTML als GET-Request-Parameter senden?

http://sample.com/?html=<html><head>... 

Dies funktioniert nicht im Moment, ich denke, sein eine Codierung Problem. Hast du irgendwelche Ideen wie das geht?

method.setQueryString(new NameValuePair[] {new NameValuePair("report", "<html>....")}); 
client.executeMethod(method) 

Dies schlägt mit org.apache.commons.httpclient.NoHttpResponseException: The server localhost failed to respond fehl. Wenn ich "<html>" durch "Test .." ersetze, funktioniert es gut.

EDIT

Es scheint, ein Problem der URL-Länge nach der Codierung, der Server tut, außer eine solche lange URLs zu sein. Senden als POST löst das Problem.

Antwort

3

Verwenden Sie URL-Codierung, um Ihre HTML-Zeichenfolge zuerst zu formatieren.

String yourHtmlString = java.net.URLEncoder.encode("<html>...."); 
method.setQueryString(new NameValuePair[] {new NameValuePair("report", yourHtmlString)}); 
+0

Danke. Jetzt sieht die Zeichenfolge verschlüsselt aus, aber der Server reagiert nicht darauf. Das gleiche im Browser manuell zu tun, tun Sie nichts. Gibt es eine URL-Längenbeschränkung, die in Webservern üblich ist? – Mork0075

+0

@ Mork0075 Die HTTP-Spezifikation erwähnt keine Längenbeschränkungen, aber wenn Sie ein wenig googeln, finden Sie, dass Browser- und Serverimplementierung unterschiedliche Längenbeschränkungen auferlegen, also ist es sicherlich etwas zu berücksichtigen. – Daan

+0

Ich habe ein Delta-Debugging durchgeführt und nach dem Zuschneiden der Zeichenfolge auf etwas um 2000 Zeichen funktioniert es. Aber ich würde gerne Informationen auf dem Server speichern, die das übersteigt. Hast du irgendwelche Ideen? – Mork0075

2

tun konnte ich mit Base64-Codierung gehen würde und vielleicht eine Art von Kompression, bevor es auf die Länge Ihres Inhalts gegeben abhängig:

RFC 2068 heißt es: Server sollten Seien Sie vorsichtig bei der Abhängigkeit von URI-Längen über 255 Byte, da einige ältere Client- oder Proxyimplementierungen diese Längen möglicherweise nicht korrekt unterstützen. Die Spezifikation für die URL-Länge schreibt keine minimale oder maximale URL-Länge vor, aber die Implementierung variiert je nach Browser. Unter Windows: Opera unterstützt ~ 4050 Zeichen, IE 4.0+ unterstützt genau 2083 Zeichen, Netscape 3 -> 4.78 unterstützt bis zu 8192 Zeichen, bevor Fehler beim Herunterfahren verursacht werden, und Netscape 6 unterstützt ~ 2000, bevor beim Start Fehler verursacht werden.