为什么OkHttp post方法发送get请求而不是post请求?

时间:2015-05-25 10:37:32

标签: java android post get okhttp

我在Android应用程序中工作,需要通过POST请求从Web api获取令牌,我使用的是OkHttp库版本2.3.0但奇怪的是post方法正在执行GET请求,因此我获得405状态代码这是服务器不允许响应的方法。

这是我的代码。

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

public String executePOST(){

    OkHttpClient client = new OkHttpClient();

    .
    .
    .
    .

    String url = API_URL + "/oauth/access_token/";
    String strResponse = null;

    RequestBody body = RequestBody.create(JSON, jsonBody);

    Request request = new Request.Builder()
          .url(url)
          .post(body)
          .build();

    Response response;

    try {

        response = client.newCall(request).execute();
        strResponse = response.body().string(); 

      } catch (IOException e) {
            e.printStackTrace();
      }

      return strResponse;
   }

当我调试代码时,响应对象具有此内容......

enter image description here

知道这有什么问题吗?这个可能的工作是什么?对你的帮助表示感谢!感谢...

4 个答案:

答案 0 :(得分:2)

当我将POST发送到 http ://而不是 https ://时,我遇到了这种问题。

我想,它会自动将我重定向到https://,其中方法类型丢失了。

答案 1 :(得分:1)

请注意HTTP响应的priorResponse()成员。您的POST请求正在被重定向,并且Web服务器拒绝重定向的请求。无论网络服务器正在进行重定向,都应该返回307或308(保留请求方法),而不是当前返回的重定向响应代码。

答案 2 :(得分:1)

我的问题是网址中有一个额外的斜杠,就像以前一样

mysite.com/api/v1/question/attend /

在删除了如下所示的斜杠后可以正常工作

mysite.com/api/v1/question/attend

答案 3 :(得分:0)

您需要在构建请求时设置呼叫帖子,如下所示:

  String postBody = "postBody\n";

    Request request = new Request.Builder()
        .url("https://api.github.com/markdown/raw")
        .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody))
        .build();

但我明白了,你正在发帖...也许media_type应该是不同的。

  public static final MediaType MEDIA_TYPE_MARKDOWN
      = MediaType.parse("text/x-markdown; charset=utf-8");

但你可能需要这个:

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