我试图在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.
}
}
}
}
这在通常情况下效果很好。但是,在某些情况下,即使服务器返回200代码,OkHttp3仍可能无法解析响应代码。这意味着Flask Web服务器运行良好。因此,我认为响应代码在传输到客户端时会丢失或更改某些部分。可能会导致这种错误。无论如何,我不确定。但是问题是,在恶劣的条件下,这种情况经常发生。因此,在极端恶劣的情况下,我不得不尝试5次以上。
此外,在某些情况下,flask Web服务器可能会通过OkHttp3从客户端接收到损坏的数据。
我的Flask Web服务器正在Amazon EC2服务器上运行。
我无法抓住导致我的错误的原因。
请帮助我。