2

Content-Length を POST ヘッダーの一部として期待するサーバーがあります。POSTing には、Apache HttpComponents ライブラリを使用しています。

これは、予想されるリクエストの簡素化されたバージョンです (もちろん、必要なヘッダーはすべて含まれています)。

POST /ParlayREST/1.0/sample/ HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: server.url.com:8080
Content-Length: 287
{
    "listenerURL":"http://application.example.com/notifyURL"},
    "sessionId":"12345"
}

HttpPostのsetEntityメソッドを使用して、POST のコンテンツとしてStringEntity (変換された json -> String -> StringEntity)を設定しました。しかし、リクエストを実行すると、ヘッダー内にContent-lengthが指定されていない POST リクエストになります。

この不足しているヘッダーを追加する方法はありますか?

(コンテンツの長さが既に存在するというエラーをスローしたContent-Lengthを設定するためにsetHeader()を試しました)

これは、POST リクエストを作成するために使用しているコードです。

//Convert the registration request object to json
StringEntity registrationRequest_json_entity = new StringEntity(gsonHandle.toJson(registrationRequest));
registrationRequest_json_entity.setContentType("application/json");

//Creating the HttpPost object which contains the endpoint URI
HttpPost httpPost = new HttpPost(Constants.CLIENT_REGISTRATION_URL);
httpPost.setHeader(HTTP.CONTENT_TYPE,"application/json");
httpPost.setHeader("Accept","application/json");
httpPost.setHeader(HTTP.TARGET_HOST,Constants.REGISTRATION_HOST + ":" + Constants.REGISTRATION_PORT);

//Set the content as enitity within the HttpPost object     
httpPost.setEntity(registrationRequest_json_entity);

HttpResponse response = httpClient.execute(httpPost, new BasicHttpContext());
HttpEntity entity = response.getEntity();
if (entity != null) {
    //work on the response
}
EntityUtils.consume(entity);
4

2 に答える 2

1

HttpClientは、同封されたメッセージ エンティティのプロパティと実際のプロトコル設定に基づいて、ヘッダー値をContent-Length自動的に生成します。Transfer-Encoding

これらのヘッダーを手動で設定しないでください。

于 2019-11-05T09:17:47.090 に答える
0

試す:

httppost.setHeader(HTTP.CONTENT_LEN,"0");

これにより、コンテンツの長さが 0 に設定されます。

于 2013-07-31T15:13:07.613 に答える