2009-05-08 6 views
1

GET-RequestパラメータとしてHTMLを送信するには?私はアパッチのHttpClientで、このようなGETリクエストでHTML文字列を送りたい

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

このdoesntの仕事を現時点で、私はそのエンコーディングの問題だと思います。あなたはそれをする方法を知っていますか?

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

これは、org.apache.commons.httpclient.NoHttpResponseException: The server localhost failed to respondで失敗します。もし私が"<html>"を "test .."に置き換えれば、うまく動作します。

EDIT

は、そのような長いURLを除き、サーバーのdoesntをコードした後、URLの長さの問題であることを縫い目。 POSTとして送信すると問題が解決されます。

答えて

3

URLエンコーディングを使用してhtml文字列を最初にフォーマットしてみてください。

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

ありがとうございました。今は文字列がエンコードされているように見えますが、サーバーはそれに応答しません。ブラウザで同じものを手動で試してみると何もしません。 WebサーバーにはURLの長さ制限がありますか? – Mork0075

+0

@ Mork0075 HTTP仕様では長さの制限は言及されていませんが、もしあなたがgoogleのようなものであれば、ブラウザーとサーバーの実装が異なる長さ制限を課していることが分かります。 – Daan

+0

私はいくつかのデルタデバッグを行い、2000文字前後の文字列を切り取った後に動作します。しかし、これを超えるサーバー上のストア情報が好きです。ハバには何か考えがありますか? – Mork0075

1

HTML文字列には、URLエンコードされる文字が含まれています。 hereを読んでください。あなたが、私はそれが与えられたコンテンツの長さに応じて、前にbase64エンコードと圧縮のかもしれないいくつかの並べ替えでいいと思うUrlUtils.simpleFormUrlEncode

2

とエンコーディングを行うことができ

RFC 2068の状態: サーバー必要があります一部の古いクライアントまたはプロキシの実装ではこれらの長さを適切にサポートしない可能性があるため、URIの長さが255バイトを超えているかどうかには注意してください。 URLの長さの仕様はURLの最小長または最大長を指定しませんが、実装はブラウザによって異なります。 WindowsではOperaは〜4050文字をサポートし、IE 4.0+は正確に2083文字をサポートし、Netscape 3 - > 4.78は最大8192文字をサポートしてシャットダウン時にエラーを引き起こし、Netscape 6は〜2000をサポートして起動時にエラーを引き起こします。

関連する問題