Android: OkHttpRequest не может разобрать ответ от веб-сервера Flask - PullRequest
0 голосов
/ 23 июня 2019

Я попытался реализовать вход в систему с помощью приложения «Флэш-сервер» в приложении для Android.

Это мой код API-интерфейса для сервера «Фляга».

    from flask_httpauth import HTTPBasicAuth

@auth.login_required
def get_resource():
    token = g.user.generate_auth_token(600)
    return jsonify({
        'id':g.user.id,
        'username':g.user.username,
        'token':token.decode('ascii')
    }), 200

И это часть кода моего приложения для Android для входа в систему..

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.ConnectionPool;
import okhttp3.Credentials;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
void login_online(String user, String password) {
    OkHttpClient client = new OkHttpClient.Builder()
        .connectTimeout(300, TimeUnit.SECONDS)
                .readTimeout(300, TimeUnit.SECONDS)
                .writeTimeout(300, TimeUnit.SECONDS)
                .retryOnConnectionFailure(true)
                .connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
                .build();

    String credential = Credentials.basic(username, password);
    Request request = new Request.Builder()
                .url(Global.baseUrl + "/api/resource")
                .header("Authorization", credential)
                .build();

    client.newCall(request).enqueue(new Callback() {
        public void onFailure(Call call, IOException e) {
            ....
        }
        public void onResponse(Call call, Response response) throws IOException {
            try {
                result = new JSONObject(response.body().string());

            } catch (JSONException e) {


            } catch (IOException e) {
                //In some cases, IOException occurs when parsing response message.

            }
        }
    }
}

Это хорошо работает в обычных случаях.Но в некоторых случаях OkHttp3 может не выполнить синтаксический анализ кода ответа, даже если сервер возвращает код 200.Это означает, что веб-сервер Flask работает хорошо.Так что, я думаю, некоторые части были потеряны или изменены в коде ответа при его передаче на клиентскую сторону.Это может вызвать такую ​​ошибку.В любом случае, я не уверен в этом.Но проблема в том, что в плохих условиях это случается очень часто.Поэтому мне приходилось пробовать более 5 раз в крайне плохих случаях.

Кроме того, в некоторых случаях веб-сервер фляги может получать поврежденные данные со стороны клиента через OkHttp3.

Мой веб-сервер флягиработает на сервере Amazon EC2.

Я не могу понять, откуда появляются ошибки.

Есть предложения от сообщества?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...