我在我的 Android 项目中使用 Google Http Java Client 库。我有以下基本代码,用于在 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 错误请求错误请求错误请求 - 无效标头
HTTP 错误 400。请求的标头名称无效。
在 com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1095)我尝试了故障排除。库的 NetHttpRequest 类中的连接对象有一个带有 EOFException 的 HttpEngineFailure 对象,这让我认为连接没有被关闭,这是一个最佳实践问题而不是错误。
另一方面,我在 Android API 2.2 模拟器上进行了尝试,并且 POST 请求在那里正常工作。表明这是一个 HttpUrlConnection 问题。
我在产品组页面上问了这个问题,但没有得到回复,所以我想也许这里的一些 Java/Android 专家可以帮助我解决这个问题。