Как отправить x-www-form-urlencoded в модификации - PullRequest
1 голос
/ 04 июня 2019

У меня есть запрос на вход в API

Call<TokenJSONModel> login(@Header("Authorization") CredentialsModel credentials, @Field("access_token") String authKey );

authKey равен x-www-form-urlencoded

, поэтому я добавил @FormUrlEncoded до POST, но все еще получаю 400 Bad Request.

Я удваиваю адрес chcecked, аргументы в отладке - corect credentials с префиксом "Basic", но authKey не имеют префикса access_token.

В почтальоне все в порядке, я получаю token и user.

Я пытался:

Call<TokenJSONModel> call = RetrofitClient.getInstance().getApi().login(credentials, "access_token:"+authKey));

, но ничего не изменилось.

При плохих учетных данных или токене я должен получить 401 unauthorized, навсегда 201 Created.

Логи из API:

2019-06-04T19:17:06.796534+00:00 app[web.1]: POST /auth 400 0.477 ms - -
2019-06-04T19:17:07.068321+00:00 heroku[router]: at=info method=POST path="/auth" my_webserver.com request_id=5c4efe45-5d54-4fde-8420-d0fcb3338558 fwd="148.81.117.54" dyno=web.1 connect=1ms service=3ms status=400 bytes=188 protocol=https
2019-06-04T19:17:07.069147+00:00 app[web.1]: POST /auth 400 0.519 ms - -
2019-06-04T19:17:17.711709+00:00 app[web.1]: POST /auth 201 43.530 ms - 393
2019-06-04T19:17:17.713351+00:00 heroku[router]: at=info method=POST path="/auth" my_webserver.com request_id=3ff2fdea-c23b-40ef-8f62-acc410068007 fwd="148.81.117.54" dyno=web.1 connect=0ms service=45ms status=201 bytes=662 protocol=https

1-й - для запроса на модификацию Android, 2-й - от почтальона.Я заметил, что Android-запрос в 3,5 раза меньше, чем запрос от почтальона - почему?

1 Ответ

0 голосов
/ 04 июня 2019

Хорошо, я нашел решение.После того, как я добавил

    @Headers({
            "Content-Type: application/x-www-form-urlencoded",
            "accept-encoding: gzip, deflate",
            "access_token: mtlNzTVmXP4IBSba3z4XXXX",
            "Authorization: Basic a2FtaWwua2ljaW5za2lAc3R1ZGVudC53YXQuZXXX"
    })
    @FormUrlEncoded
    @POST("/auth")

, я заметил, что все работает.Учетные данные, которые я передаю в своем запросе, обрабатывались как ссылка на объект CredentialsModel, содержащий String, когда сервер хотел только String.Я исправил это:

    @FormUrlEncoded
    @POST("/auth")
    Call<ResponseBody> login(@Header("Authorization") String credentials, @Field("access_token") String authKey );

и

Call<ResponseBody> call = RetrofitClient.getInstance().getApi().login(Credentials.basic(email, password),authKey);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...