Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么HTTP post方法发送get请求而不是post请求?_Java_Android_Post_Get_Okhttp - Fatal编程技术网

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

Java 为什么HTTP post方法发送get请求而不是post请求?,java,android,post,get,okhttp,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(){ OkHttpCli

我在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;
   }
调试代码时,响应对象包含以下内容


你知道这有什么问题吗?这一个可能的解决办法是什么?非常感谢您的帮助!谢谢…

在生成请求时,您需要设置call post,如下所示:

  String postBody = "postBody\n";

    Request request = new Request.Builder()
        .url("https://api.github.com/markdown/raw")
        .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody))
        .build();
但我明白了,你在给波斯特打电话。。。也许媒体类型应该有所不同

  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");

请注意HTTP响应的
priorResponse()
成员。正在重定向您的
POST
请求,Web服务器拒绝重定向的请求。很可能,无论Web服务器在做什么,重定向都应该返回307或308(保留请求方法),而不是当前返回的重定向响应代码。

我在向http://发送帖子时遇到了这种问题,而不是https://


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

我的问题是URL中有一个额外的斜杠,以前是这样的

mysite.com/api/v1/question/attent/

它在删除斜线后工作,如下所示

mysite.com/api/v1/question/attent


好的,我试试……:)媒体类型标记常量是什么?我在哪里可以得到它?是的,但是我应该在两者中使用什么呢?我正在使用JSON媒体类型。看起来库正在根据媒体类型选择要使用的方法。。。但它的效果很差。尝试使用markdown,看看服务器是否会接受。是否尝试删除URL末尾的/?我曾经遇到过一个类似的问题,这样做为我解决了它。这也发生在我身上。。。这是因为我在API_URL中包含了“www”