AndroidプロジェクトでGoogleHttpJavaクライアントライブラリを使用しています。AndroidアプリのサーバーへのPOSTリクエスト用に次の基本コードがあります。
final GenericUrl url = new GenericUrl(postURL);
final HttpContent content = new JsonHttpContent(JSON_FACTORY, jsondata);
// requestFactory initiated statically as class object
HttpRequest request = requestFactory.buildPostRequest(url, content);
HttpResponse response = request.execute();
'RequestFactory'は、POSTメソッドを保持するクラスで静的として定義されています。
static final HttpRequestFactory requestFactory = HTTP_TRANSPORT
.createRequestFactory(new HttpRequestInitializer() {
@Override
public void initialize(HttpRequest request) {
request.setParser(new JsonCParser(JSON_FACTORY));
HttpHeaders headers = new HttpHeaders();
headers.setContentType("application/json");
request.setHeaders(headers);
}
});
同じrequestfactoryが、問題を引き起こしていないGETリクエストに使用されます。POSTメソッドのみが400を引き起こします。サーバーをチェックしましたが、何も送信されていません。ログのメッセージは次のとおりです。不正なリクエスト
不正なリクエスト-無効なヘッダー
HTTPエラー400。リクエストのヘッダー名が無効です。
com.google.api.client.http.HttpResponseException:400 Bad Request Bad Request不正なリクエスト-無効なヘッダー
HTTPエラー400。リクエストのヘッダー名が無効です。
com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1095)でトラブルシューティングを試みました。ライブラリのNetHttpRequestクラスの接続オブジェクトにはEOFExceptionのあるHttpEngineFailureオブジェクトがあり、接続が閉じられていないと思われます。これはバグではなくベストプラクティスの問題です。
一方、Android API 2.2エミュレーターで試してみたところ、POSTリクエストは正常に機能しました。HttpUrlConnectionの問題であることを示します。
製品グループのページでこの質問をしましたが、応答がありませんでした。そのため、ここにいるJava / Androidの専門家が、これを理解するのを手伝ってくれるかもしれません。