質問

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エンコードする必要がある文字が含まれています。 こちらをご覧ください。

>

UrlUtils.simpleFormUrlEncode

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top