Android 용 모바일 클라이언트가 Flask REST API를 통해 서버와 통신하는 Android 애플리케이션을 개발 중입니다. 특정 모바일 장치는 POST 끝점 중 하나에 대해 서버에서 400 응답을 간헐적으로 수신합니다. 400 즉시 요청 JSON 객체가있는 경우 내부 상태 액세스로 반환Flask POST 400 요청에 액세스 할 때 오류가 발생했습니다. JSONObject
def post(self):
app.logger.info("Request :" + request.url)
if request.headers['Content-Type'] == "application/json":
tok = str(request.json['tok'])
user_id = str(request.json['user_id'])
contact = str(request.json['contact'])
.
.
.
else:
response = jsonify({"message": "Unsupported Media Type"})
response.status_code = 415
return response
응답 :
다음은 관련된 서버 측 코드이다.
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters,Constants.HTTP_CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParameters, Constants.HTTP_SOCKET_TIMEOUT);
HttpClient client = new DefaultHttpClient(httpParameters);
URL url = null;
URI uri = null;
try {
url = new URL(Constants.URL+"api/v1/testapi");
uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
} catch (MalformedURLException e3) {
e3.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
HttpPost post = new HttpPost(uri.toString());
final JSONObject msgObject = jObject[0];
StringEntity se = null;
try {
se = new StringEntity(msgObject.toString());
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
post.setEntity(se);
boolean postFailed = false;
try {
HttpResponse response = client.execute(post);
Log.v(TAG,response.getStatusLine().toString());
if(response.getStatusLine().toString().indexOf("200")!=-1){
HttpEntity httpEntity = response.getEntity();
InputStream is = httpEntity.getContent();
JSONParser parseJSON = new JSONParser();
JSONObject JO = parseJSON.getJSONObj(is);
.
.
.
}
is.close();
}else
postFailed = true;
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
postFailed = true;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
postFailed = true;
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
postFailed = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
postFailed = true;
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
postFailed = true;
}
msgObject 모든 예상되는 키 값 쌍을 보유 입력 된 JSONObject이다 :
은 다음 POST 요청을 JSON 객체를 인코딩하고 실행하는데 사용되는 로이드 자바 코드이다.
이상한 부분은 대부분 특정 모바일 클라이언트 (간헐적으로 발생하는 문제)입니다.이 문제를 해결하는 방법에 대한 제안이 있으면 알려 주시기 바랍니다. 감사!
당신에게 JSON은 "USER_ID"의 키를 가진 아이가 요청 확신
희망 : 콘텐츠 형식뿐만 아니라 인코딩 때문에이 같은 헤더 결과? – kupsef
더 많은 코드를 붙여 넣을 수 있습니까? 확인해야 할 2 가지 사항이 있으며 이전 요청의 응답을 완전히 소비해야하며 연결을 올바르게 해제해야합니다. –
@kupsef, 나는 json이 대부분의 모바일 클라이언트와 완벽하게 작동하기 때문에 'user_id'키를 가진 아이가 있다는 것은 확실합니다. 또한, 내가 키를 검색하는 순서를 바꿨는지 확인하려면 아무런 효과가 없습니다. – aadharjain