ホームページ  >  記事  >  バックエンド開発  >  Android アプリが ByetHost サーバーにアクセスするときに JSON ではなく HTML を受信するのはなぜですか?

Android アプリが ByetHost サーバーにアクセスするときに JSON ではなく HTML を受信するのはなぜですか?

DDD
DDDオリジナル
2024-10-28 02:34:02544ブラウズ

Why Does My Android App Receive HTML Instead of JSON When Accessing a ByetHost Server?

ByetHost サーバーが JSON 文字列で HTML 値「ブラウザを確認しています」を渡す: Android アプリの問題

問題:

Android アプリで JSON 文字列を解析しているときに、HTML 値が渡されます。この問題は、PHP ファイルを使用して ByetHost サーバーにアクセスするときに発生しますが、他のサーバーにはアクセスしません。

解決策:

ByetHost は、testcookie-nginx-module と呼ばれるセキュリティ モジュールを採用しています。 HTTP リクエストに対する検証の追加レイヤー。このモジュールは 2 段階のプロセスに従います:

  1. 初期リクエスト: 最初の HTTP リクエストは、AES キーを含む検証 Cookie を生成するスクリプトにリダイレクトされます。
  2. 後続のリクエスト: クライアントは後続のリクエストで検証 Cookie を送信し、モジュールはこれを検証して目的の URL へのアクセスを許可します。

Android アプリの実装:

Android アプリの問題を解決するには、次の手順に従ってください:

  1. 検証 Cookie を取得します: Web ブラウザ (Google Chrome など) を使用します。
  2. ブラウザから Cookie キーを取得します: Chrome の設定を使用して [コンテンツ設定] に移動し、Web サイトの Cookie で「__test」を検索します。 「content」、「path」、「expires」の値をコピーします。
  3. Android リクエストに Cookie を追加します: JSONfunctions クラスを変更して、検証 Cookie を HTTP リクエストに追加します:
<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。