Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Apl Android Saya Menerima HTML Daripada JSON Apabila Mengakses Pelayan ByetHost?

Mengapa Apl Android Saya Menerima HTML Daripada JSON Apabila Mengakses Pelayan ByetHost?

DDD
DDDasal
2024-10-28 02:34:02544semak imbas

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

Pelayan ByetHost Melepasi Nilai HTML 'Menyemak Penyemak Imbas Anda' dengan JSON String: Isu Apl Android

Masalah:

Semasa menghuraikan rentetan JSON dalam apl Android, nilai HTML sedang dihantar. Isu ini berlaku apabila mengakses pelayan ByetHost dengan fail PHP, tetapi bukan pelayan lain.

Penyelesaian:

ByetHost menggunakan modul keselamatan yang dipanggil testcookie-nginx-module yang menambah lapisan tambahan pengesahan kepada permintaan HTTP. Modul ini mengikuti proses dua langkah:

  1. Permintaan Awal: Permintaan HTTP pertama diubah hala ke skrip yang menghasilkan kuki pengesahan yang mengandungi kunci AES.
  2. Permintaan Seterusnya: Pelanggan menghantar kuki pengesahan dalam permintaan seterusnya, yang modul mengesahkan untuk membenarkan akses kepada URL yang dikehendaki.

Pelaksanaan Apl Android:

Untuk menyelesaikan isu dalam apl Android, ikut langkah berikut:

  1. Dapatkan Kuki Pengesahan: Gunakan penyemak imbas web (cth., Google Chrome ) untuk mengakses URL yang dikehendaki.
  2. Dapatkan Kunci Kuki daripada Penyemak Imbas: Gunakan tetapan Chrome untuk menavigasi ke "Tetapan Kandungan" dan cari "__test" di bawah kuki tapak web. Salin nilai "kandungan," "laluan," dan "tamat tempoh."
  3. Tambah Kuki pada Permintaan Android: Ubah suai kelas JSONfunctions anda untuk menambah kuki pengesahan pada permintaan 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>

Nota: Gantikan cookieContent, cookieExpires dan cookiePath dengan nilai yang anda perolehi daripada penyemak imbas.

Pengubahsuaian ini akan memastikan bahawa apl Android anda dihantar kuki pengesahan dengan setiap permintaan HTTP, memintas ubah hala HTML awal dan membenarkannya untuk mendapatkan semula data JSON.

Atas ialah kandungan terperinci Mengapa Apl Android Saya Menerima HTML Daripada JSON Apabila Mengakses Pelayan ByetHost?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn