Maison  >  Article  >  développement back-end  >  Pourquoi mon application Android reçoit-elle du HTML au lieu de JSON lors de l'accès à un serveur ByetHost ?

Pourquoi mon application Android reçoit-elle du HTML au lieu de JSON lors de l'accès à un serveur ByetHost ?

DDD
DDDoriginal
2024-10-28 02:34:02544parcourir

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

Le serveur ByetHost transmet les valeurs HTML « Vérification de votre navigateur » avec la chaîne JSON : problème d'application Android

Problème :

Lors de l'analyse des chaînes JSON dans une application Android, des valeurs HTML sont transmises. Ce problème se produit lors de l'accès à un serveur ByetHost avec des fichiers PHP, mais pas avec d'autres serveurs.

Solution :

ByetHost utilise un module de sécurité appelé testcookie-nginx-module qui ajoute une couche supplémentaire de validation pour les requêtes HTTP. Ce module suit un processus en deux étapes :

  1. Requête initiale : La première requête HTTP est redirigée vers un script qui génère un cookie de validation contenant une clé AES.
  2. Demandes ultérieures : Le client envoie le cookie de validation dans les requêtes ultérieures, que le module valide pour autoriser l'accès à l'URL souhaitée.

Implémentation de l'application Android :

Pour résoudre le problème dans l'application Android, suivez ces étapes :

  1. Récupérez le cookie de validation : Utilisez un navigateur Web (par exemple, Google Chrome ) pour accéder à l'URL souhaitée.
  2. Obtenez la clé de cookie à partir du navigateur : Utilisez les paramètres de Chrome pour accéder aux « Paramètres de contenu » et recherchez « __test » sous les cookies du site Web. Copiez les valeurs de "content", "path" et "expires".
  3. Ajoutez le cookie aux requêtes Android : Modifiez votre classe JSONfunctions pour ajouter le cookie de validation aux requêtes 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>

Remarque : Remplacez cookieContent, cookieExpires et cookiePath par les valeurs que vous avez obtenues à partir du navigateur.

Cette modification garantira que votre application Android envoie le cookie de validation à chaque requête HTTP, contournant la redirection HTML initiale et lui permettant de récupérer les données JSON.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn