java - Google HTTP Java 客户端的 POST 请求错误

标签 java android httpurlconnection google-http-client

我在我的 Android 项目中使用 Google Http Java 客户端库。我有以下基本代码,用于在 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。我检查了服务器,没有任何东西被发送到它。日志中的消息如下: 错误的请求

错误请求 - header 无效


HTTP 错误 400。请求的 header 名称无效。

com.google.api.client.http.HttpResponseException: 400 错误请求 错误的请求

错误请求 - header 无效


HTTP 错误 400。请求的 header 名称无效。

在 com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1095)

我尝试了故障排除。库的 NetHttpRequest 类中的连接对象有一个带有 EOFException 的 HttpEngineFailure 对象,这让我认为连接没有被关闭,这是一个最佳实践问题而不是错误。

另一方面,我在 Android API 2.2 模拟器上尝试过,POST 请求在那里工作正常。表明这是一个 HttpUrlConnection 问题。

我在产品组页面上问了这个问题,但没有得到回应,所以我想也许这里的一些 Java/Android 专家可以帮助我解决这个问题。

最佳答案

除了创建 JsonHttpContent,您还可以这样做:

HttpRequest request = getHttpRequestFactory()//
        .buildPostRequest(new GenericUrl(apiUrl), ByteArrayContent.fromString("application/json", mJsonObject.toString()));
    request.setParser(new JacksonFactory().createJsonObjectParser());

关于java - Google HTTP Java 客户端的 POST 请求错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14670953/

相关文章:

android 布局不填满屏幕,在左侧、右侧和顶部留下填充

android - Sherlock 操作栏的菜单项背景

java - 自定义 SwitchPreference 不保存值

java - HttpURLConnection 在 Android 上的哪里存储 session ID cookie?

java - 使用监听器从 httpURLConnection 检索数据

java - 如何以编程方式在android Q中获取IMSI?

java - Android:使用单击按钮在单个相对布局中创建两个线性布局

java - Maven忽略maven-frontend-plugin,没有错误

java - HttpURLConnection 的套接字泄漏

java - 当尝试部分模拟 void 方法时,我收到 NotAMockException - 我做错了什么?