【问题标题】:HTTP Post Only works with default HttpClient, not with OkHttpClientHTTP Post 仅适用于默认 HttpClient,不适用于 OkHttpClient
【发布时间】:2014-07-23 09:48:56
【问题描述】:

我正在做一个项目,该项目需要我发送一个帖子请求到 http://sagecell.sagemath.org/kernel(只是一个帖子,没有数据)以及两个额外的标题, Accept-Encoding:identity 和accepted_tos:true。

如果像这样使用默认的 httpClient,这可以正常工作:

httpClient = new DefaultHttpClient();

HttpPost httpPost = new HttpPost();

String url = UrlUtils.getKernelURL();

httpPost.setURI(URI.create(url));

ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair(HEADER_ACCEPT_ENCODING,VALUE_IDENTITY));
postParameters.add(new BasicNameValuePair(HEADER_TOS,"true"));
httpPost.setEntity(new UrlEncodedFormEntity(postParameters));

HttpResponse httpResponse = httpClient.execute(httpPost);
InputStream inputStream = httpResponse.getEntity().getContent();

webSocketResponse = gson.fromJson(new InputStreamReader(inputStream), WebSocketResponse.class);
inputStream.close();

但是,如果我想通过 OkHttpClient 使用相同的东西,它会给我一个 403 错误:

httpClient = new OkHttpClient();

public static final MediaType jsonMediaType = MediaType.parse("application/json; charset=utf-8");

RequestBody body = RequestBody.create(jsonMediaType, "");

Request request = new Request.Builder()
        .addHeader(HEADER_ACCEPT_ENCODING, VALUE_IDENTITY)
        .addHeader(HEADER_TOS, "true")
        .url(url)
        .post(body) //I've tried null here as well
        .build();

Response response = httpClient.newCall(request).execute();

Log.i(TAG,"STATUS CODE"+response.code()); //This is 403

Ion 甚至 HttpUrlConnection 等库也是如此,但似乎只有 Apache 客户端可以工作。

任何关于为什么这不起作用的答案将不胜感激。

【问题讨论】:

标签: android httpclient okhttp


【解决方案1】:

错误 403 表示它被服务器禁止。 在第一种情况下(在使用默认 httpclient 时)您没有添加标头,您只是向实体添加了一个名称-值对。 添加你应该使用的标题

httpPost.addHeader("key","value");

【讨论】:

    【解决方案2】:

    您的请求正文为空。您应该提供表单编码的请求正文或 JSON 请求正文以及相应的内容类型。

    如果您愿意,MimeCraft 将为您构建一个表单编码的请求正文,Gson 将执行 JSON。

    【讨论】:

    • 但这就是问题所在,这是一个请求正文为空的帖子。
    • 空字符串不是有效的 JSON。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2021-07-04
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多