잠시 동안 무엇이 잘못되었는지 알아 내려고 노력했습니다. 내 서버 API에 json 본문과 HttpClient.execute 함께 게시물 요청을 만들고있어. 정상적인 와이파이 및 대부분의 3g에서 잘 작동하지만 특히 & T dataplans가있는 휴대 전화에서는 3g이 넘기 때문에 상태 코드 422의 요청을 실행하려고하면 HttpResponseException이 다시 발생합니다. 422에 대한 조사가 있었는데 그 이유는 다음과 같습니다.Android : HttpPost 콘텐츠 유형 헤더 및 본문이 wifi와 3g가 다른 경우
"422 Unprocessable Entity (WebDAV) (RFC 4918), 요청은 형식이 올바르지 만 의미 론적 오류로 인해 처리 할 수 없습니다."
요청이 어떻게 바뀌는 지 알 수 없지만 Wi-Fi 또는 3g에 관계없이 요청을 만들 때 동일한 작업을 수행하고 있습니다. 이 오류의 원인은 무엇입니까?
편집 : 내 서버가 위조 방지 기능을 사용하여 게시물을 잡는 것 같습니다. 끄고 오류가 멈췄지만 API는 통과하지 못했습니다. 조금 더 깊게 파고 서버에서 실제로 수신중인 것을 출력하여 wifi를 켜고 껐다가 비교하여 두 가지 차이점을 발견했습니다. 첫째로, 시체는 3g에서 비어 있었고, 어떻게 든 보냈던 것으로부터 차단 된 것처럼 보입니다. 둘째, 헤더가 전송되는 콘텐츠 유형을 변경했습니다.
wifi : "application/json" att 3g : "text/plain; charset = ISO-8859-1, application/JSON "
내가 기대 해요"이런 내가 설정하고있어 나의 연결 특정 응용 프로그램/JSON "내가의 3G 이상 이동하면 상황이 변화하는 이유
StringEntity se = new StringEntity(json.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
어떤 아이디어?
업데이트 : tcpdump를 실행하면 안드로이드에서 보내는 메일이 wifi와 3g 사이에서 똑같은 것처럼 보이므로 내 데이터를 변경하는 공급자 인 것으로 보입니다. HTTPS 이외의 다른 제안 된 전략은 무엇입니까?
서버에서받은 내용 (전화로 보낸 내용과 비교)은 이동 통신사의 프록시를 통해 재 작성 중일 수 있습니다. 당신이 뿌리가 있다면 당신은 tcpdump를 실행하여 무엇을 보내고 있는지를 볼 수 있습니다 (루트가 아닌 방법이지만 매우 까다 롭습니다). https를 사용하면 해결할 수 있습니다. –