しばらくの間、これの何が問題なのかを理解しようとしてきました。サーバーAPIへのjson本体を使用してHttpClient.executeで投稿リクエストを作成しています。通常の Wi-Fi とほとんどの 3g では正常に動作しますが、特に AT&T データプランを備えた電話で 3g を使用している場合、リクエストを実行しようとすると HttpResponseException が返されます。ステータス コード 422 です。に:
「422 Unprocessable Entity (WebDAV) (RFC 4918)、要求は整形式でしたが、セマンティック エラーのため従うことができませんでした。」
したがって、リクエストの送信方法に問題があると推測していますが、Wi-Fi を使用しているか 3G を使用しているかにかかわらず、リクエストを作成する際に同じことを行っています。このエラーの原因について何か考えはありますか?
編集:私のサーバーが偽造防止で投稿をキャッチしているように見えました。オフにしてエラーは止まりましたが、APIは通りませんでした。もう少し深く掘り下げて、サーバーが実際に受信しているものを出力し、wifi のオンとオフを比較して、2 つの違いに気付きました。まず、3g で本文が空だったのですが、何らかの理由で送信がブロックされたようです。次に、ヘッダーによって、送信されるコンテンツ タイプが変更されました。
wifi: "HTTP_CONTENT_TYPE"=>"application/json" att 3g: "HTTP_CONTENT_TYPE"=>"text/plain; charset=ISO-8859-1,application/json"
次のように接続を設定していることを考えると、「application/json」を期待しています。
StringEntity se = new StringEntity(json.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
3g に移行したときに状況が変わる理由はありますか?
更新: tcpdump を実行したところ、Android から送信しているものは wifi と 3g でまったく同じであるように見えるため、データを変更しているのはプロバイダーのようです。HTTPS 以外に提案された戦略はありますか?