ByetHost サーバーが JSON 文字列で HTML 値「ブラウザを確認しています」を渡す: Android アプリの問題
問題:
Android アプリで JSON 文字列を解析しているときに、HTML 値が渡されます。この問題は、PHP ファイルを使用して ByetHost サーバーにアクセスするときに発生しますが、他のサーバーにはアクセスしません。
解決策:
ByetHost は、testcookie-nginx-module と呼ばれるセキュリティ モジュールを採用しています。 HTTP リクエストに対する検証の追加レイヤー。このモジュールは 2 段階のプロセスに従います:
Android アプリの実装:
Android アプリの問題を解決するには、次の手順に従ってください:
<code class="java">try { if (post == "POST") { HttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(loginUrl); httpPost.setEntity(new UrlEncodedFormEntity(para)); httpPost.setHeader("User-Agent", "Mozilla/5.0 ..."); httpPost.addHeader("Cookie", "__test=" + cookieContent + "; expires=" + cookieExpires + "; path=" + cookiePath); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } else if (post == "GET") { HttpClient httpClient = new DefaultHttpClient(); String paramString = URLEncodedUtils.format(para, "utf-8"); loginUrl += "?" + paramString; HttpGet httpGet = new HttpGet(loginUrl); httpGet.addHeader("Cookie", "__test=" + cookieContent + "; expires=" + cookieExpires + "; path=" + cookiePath); HttpResponse httpResponse = httpClient.execute(httpGet); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } }</code>
注: cookieContent、cookieExpires、および cookiePath をブラウザから取得した値に置き換えます。
この変更により、Android アプリは確実にすべての HTTP リクエストに検証 Cookie を追加し、最初の HTML リダイレクトをバイパスして JSON データを取得できるようにします。
以上がAndroid アプリが ByetHost サーバーにアクセスするときに JSON ではなく HTML を受信するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。