1

Apaches 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>"「test..」に置き換えると、正常に動作します。

編集

エンコード後の URL の長さの問題であると思われ、サーバーはそのような長い URL を除外しません。POSTとして送信すると問題が解決します。

4

3 に答える 3

3

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

String yourHtmlString = java.net.URLEncoder.encode("<html>....");
method.setQueryString(new NameValuePair[] {new NameValuePair("report", yourHtmlString)});
于 2009-05-08T09:57:45.110 に答える
2

base64エンコーディングを使用し、コンテンツの長さに応じて、その前にある種の圧縮を行います。

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

于 2009-05-08T10:03:23.770 に答える
1

HTML 文字列には、URL エンコードが必要な文字が含まれています。ここを読んでください。

UrlUtils.simpleFormUrlEncodeでエンコードを行うことができます

于 2009-05-08T10:01:10.403 に答える