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);