Heim  >  Artikel  >  Backend-Entwicklung  >  Warum empfängt meine Android-App beim Zugriff auf einen ByetHost-Server HTML statt JSON?

Warum empfängt meine Android-App beim Zugriff auf einen ByetHost-Server HTML statt JSON?

DDD
DDDOriginal
2024-10-28 02:34:02544Durchsuche

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

ByetHost-Server übergibt HTML-Werte „Überprüfen Ihres Browsers“ mit JSON-Zeichenfolge: Android-App-Problem

Problem:

Beim Parsen von JSON-Strings in einer Android-App werden HTML-Werte übergeben. Dieses Problem tritt auf, wenn mit PHP-Dateien auf einen ByetHost-Server zugegriffen wird, jedoch nicht auf andere Server.

Lösung:

ByetHost verwendet ein Sicherheitsmodul namens testcookie-nginx-module, das hinzufügt eine zusätzliche Validierungsebene für HTTP-Anfragen. Dieses Modul folgt einem zweistufigen Prozess:

  1. Erste Anfrage: Die erste HTTP-Anfrage wird an ein Skript umgeleitet, das ein Validierungscookie mit einem AES-Schlüssel generiert.
  2. Nachfolgende Anfragen:Der Client sendet das Validierungs-Cookie in nachfolgenden Anfragen, das das Modul validiert, um den Zugriff auf die gewünschte URL zu ermöglichen.

Android-App-Implementierung:

Um das Problem in der Android-App zu beheben, folgen Sie diesen Schritten:

  1. Validierungs-Cookie abrufen:Verwenden Sie einen Webbrowser (z. B. Google Chrome). ), um auf die gewünschte URL zuzugreifen.
  2. Holen Sie sich den Cookie-Schlüssel aus dem Browser: Navigieren Sie in den Chrome-Einstellungen zu „Inhaltseinstellungen“ und suchen Sie unter den Cookies der Website nach „__test“. Kopieren Sie die Werte von „content“, „path“ und „expires“.
  3. Fügen Sie das Cookie zu Android-Anfragen hinzu: Ändern Sie Ihre JSONfunctions-Klasse, um das Validierungscookie zu HTTP-Anfragen hinzuzufügen:
<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>

Hinweis: Ersetzen Sie cookieContent, cookieExpires und cookiePath durch die Werte, die Sie vom Browser erhalten haben.

Diese Änderung stellt sicher, dass Ihre Android-App sendet das Validierungscookie bei jeder HTTP-Anfrage, umgeht die anfängliche HTML-Umleitung und ermöglicht den Abruf der JSON-Daten.

Das obige ist der detaillierte Inhalt vonWarum empfängt meine Android-App beim Zugriff auf einen ByetHost-Server HTML statt JSON?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn