Я попытался реализовать вход с помощью флеш-сервера в приложении для 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.
Я не могу поймать, что делает мои ошибки.
Пожалуйста, помогите мне.