Запрос HTTP возвращает «Неверный запрос» (код 400) в приложении android, но работает на почтальоне (код 200) - PullRequest
0 голосов
/ 15 января 2020

У меня есть API в приложении android, и оно работало долгое время. Система обновилась, и теперь я получаю «400 - Bad Request» в том же запросе (без изменений). Но в Postman или Advanced REST Client работает хорошо.

Я использую: Java Android Дооснащение 2 OkHTTP GSON

Android приложение

интерфейс LoginService

@Headers({
        "Content-Type: application/json",
        "Accept: application/json",
        "Content-Length: 61"
})
@POST(Constants.API_LOGIN)
Call<Login> login(@Body JsonObject json);

Login

        JsonObject json = new JsonObject();
        json.addProperty("email", AUTH_USER);
        json.addProperty("password", AUTH_PASS);

        Call<Login> call = new RetrofitConfig().getLoginService().login(json);
        call.enqueue(new Callback<Login>() {
            @Override
            public void onResponse(@NonNull Call<Login> call, @NonNull Response<Login> response) {
                Login login = response.body();
                Log.d(TAG, "RESPONSE: " + response.message());
                String msg = "Autenticado com sucesso.";
            }

            @Override
            public void onFailure(@NonNull Call<Login> call, @NonNull Throwable t) {
                Log.e(TAG, "Error: " + t.getMessage(), t);
                Toast.makeText(context, "Erro ao autenticar com servidor", Toast.LENGTH_SHORT).show();
                call.cancel();
            }

        });

POST-запрос

D/OkHttp: --> POST https://API/
D/OkHttp: Content-Type: application/json
    Accept: application/json
    Content-Length: 61
D/OkHttp: {"email":"EMAIL","password":"****"}
    --> END POST (60-byte body)

Ответ

D/OkHttp: <-- 400 https://API (2130ms)
    server: awselb/2.0
    date: Wed, 15 Jan 2020 14:36:31 GMT
    content-type: text/html
    content-length: 138
D/OkHttp: <html>
    <head><title>400 Bad Request</title></head>
    <body bgcolor="white">
    <center><h1>400 Bad Request</h1></center>
    </body>
    </html>
    <-- END HTTP (138-byte body)

Тот же запрос расширенного клиента REST

Запрос

Accept: application/json
Content-Type: application/json
cookie: COOKIE
content-length: 61
POST /api/login/ HTTP/1.1
Host: HOST
Accept: application/json
Content-Type: application/json
cookie: COOKIE
content-length: 61

 {"email":"EMAIL","password":"***"}

Ответ

> 200 OK

{
"token": "TOKEN"
}

Кто-то может мне помочь?

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Я нашел решение!

Я вставил header Авторизация в настройках Retrofit, и он работал отлично. При обновлении Laravel до версии 6.0, при вставке пустого "Авторизация" (этот API / логин должен был генерировать этот токен), я вернул ошибку "400 - Bad Request" .

Я только что сделал if, чтобы удалить "Авторизация" , когда токена нет и теперь он идеален! \ o /

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.level(HttpLoggingInterceptor.Level.BODY);

OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor)
        .addInterceptor(chain -> {
            Request request;
            if (LoginManager.getToken().length() > 5) {
                request = chain.request().newBuilder()
                        .header("Authorization", LoginManager.getToken())
                        .build();
            } else {
                request = chain.request().newBuilder().build();
            }
            return chain.proceed(request);
        })
0 голосов
/ 15 января 2020

Я не получил вашу точку зрения на " Обновление системы ". Если вы имеете в виду Android ОС , возможно этот ответ может помочь вам

...