GET-RequestパラメーターとしてHTMLを送信する方法は?
-
22-07-2019 - |
質問
Apache HttpClientを使用して、このようなGETリクエストでhtml文字列を送信したい:
http://sample.com/?html=<html><head>...
これは現時点では動作しません。エンコードの問題だと思います。それを行う方法はありますか?
method.setQueryString(new NameValuePair[] {new NameValuePair("report", "<html>....")});
client.executeMethod(method)
これはorg.apache.commons.httpclient.NoHttpResponseException: The server localhost failed to respond
で失敗します。 "<html>"
を<!> quot; test .. <!> quotに置き換えた場合;正常に動作します。
編集
エンコード後のURLの長さの問題と思われますが、サーバーはそのような長いURlsを除きません。 POSTとして送信すると問題が解決します。
解決
最初にhtml文字列をフォーマットするためにURLエンコードを使用してみてください。
String yourHtmlString = java.net.URLEncoder.encode("<html>....");
method.setQueryString(new NameValuePair[] {new NameValuePair("report", yourHtmlString)});
他のヒント
指定されたコンテンツの長さに応じて、base64エンコーディングと、おそらくそれより前に何らかの圧縮を行います。
RFC 2068の状態: サーバーは、255バイトを超えるURIの長さに依存することに注意する必要があります。古いクライアントまたはプロキシの実装によっては、これらの長さが適切にサポートされない場合があるためです。 URLの長さの仕様は最小または最大のURLの長さを指示するものではありませんが、実装はブラウザによって異なります。 Windowsの場合:Operaは最大4050文字、IE 4.0+は2083文字、Netscape 3-<!> gt;をサポートします。 4.78はシャットダウン時にエラーを引き起こす前に最大8192文字をサポートし、Netscape 6は起動時にエラーを引き起こす前に〜2000をサポートします。
HTML文字列には、URLエンコードする必要がある文字が含まれています。 こちらをご覧ください。
>