2015-05-25 1 views
2

Я работаю в приложении для Android, которому нужно получить токен из веб-api через запрос POST, я использую библиотеку OkHttp версии 2.3.0, но странно, что метод post выполняет запрос GET, в результате я получаю код статуса 405, который это метод, на который не разрешен ответ с сервера.Почему метод OkHttp post отправляет запрос на запрос вместо почтового запроса?

Вот мой код.

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

Любая идея, что проблема с этим? Какая возможная работа для этого? Ваша помощь будет принята с благодарностью! Спасибо ...

+1

Вы пытались удалить **/** в конце своего URL-адреса? Однажды я столкнулся с подобной проблемой, и это исправило это для меня. –

ответ

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

Хорошо, я попробую ... :) –

+0

что такое константа MEDIA_TYPE_MARKDOWN? Где я могу его получить? –

+0

Да, но что я должен использовать среди двух? Я использую JSON MediaType. –

1

Обратите внимание на priorResponse() член вашего ответа HTTP. Ваш запрос POST перенаправляется, и веб-сервер отклоняет перенаправленный запрос. Вероятно, что любой веб-сервер делает перенаправление, должен возвращать 307 или 308 (который сохраняет метод запроса) вместо любого кода ответа на перенаправление, который он возвращает в настоящее время.

+0

Это происходило со мной тоже ... и это было потому, что я включил «www» в API_URL – Arjun

2

Я была такая проблема, когда я отправить POST в HTTP: // и не HTTPS: //.

Я полагаю, он автоматически перенаправил меня на https: //, где тип метода был потерян.

Смежные вопросы