php - Erreur inattendue de demande POST chaîne Volley 500




android android-studio (8)

@ Muhammad Faizan ignore vos doutes, le problème IS une erreur de serveur 500

CECI EST LA CAUSE

  • POSTMAN et VOLLEY ne sont pas identiques
  • a) il y a un bogue dans votre code PHP or B) il y a un paramètre d'environnement que cela expose

DIAGNOSTIQUER UN NUMÉRO PHP

et vous devez ouvrir votre error_log sur php. En fonction de votre serveur, cela peut être délicat à expliquer. php.ini changez le fichier php.ini en error_log. Essayez ceci SUR LE SERVEUR

( levé ici délibérément )

/*This always works for me:*/

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

/*However, this doesn't make PHP to show parse errors - the only way to show those errors is to modify your php.ini with this line:*/

display_errors = on
/*(if you don't have access to php.ini, then putting this line in .htaccess might work too):*/

php_flag display_errors 1

DIAGNOSTIC D'UNE QUESTION ENVIRONNEMENTALE SUR UN SERVEUR

Si le error_log ne donne rien, essayez le access_log . Pourquoi? Parce qu’il indiquera probablement qu’un type de demande différent est entré. POSTMAN et VOLLEY ne sont pas identiques.

Vous devez également consulter votre access_log trop potentielle et le regarder en temps réel lorsque vous cliquez sur le facteur, puis sur le client volley.

FAITS: (pourquoi on peut en être aussi sûr)

Mon instinct dit que vous avez un problème dans un serveur mal configuré. Croyez-le ou non, access_log vous aidera davantage si tel est le cas.

Quoi qu'il en soit: il y a clairement un problème entre ce que vous mettez dans POSTMAN et ce que votre client de volée envoie - cela est la cause.

Les choses que j'ai vu causent ceci incluent:

  • Ce pourrait être une erreur SAME ORIGIN .
  • Il pourrait s'agir d'un problème INTERNAL SERVER REDIRECT .
  • Il peut s’agir d’une transmission imprécise de $ _GET à $ _POST (j’ai vu ce problème sur nginx)
  • Il pourrait s'agir d'un problème de mauvaise voie qui est bouleversé par l' no-redirect et le manque de sécurité.

mais sans nous dire la plate-forme ou le serveur (Windows? Linux? nginx? php-fpm? apache? etc), nous ne pouvons pas vous aider sur ces

J'utilise la bibliothèque Volley dans mon projet et Unexpected response code 500 comme réponse.

J'ai effectué une recherche approfondie dans stackoverflow et je suis toujours incapable de trouver une solution qui fonctionne.

Voici mon code pour faire une requête de chaîne GET

        val API = "http://squadtechsolution.com/android/v1/allcompany.php"
        val requestQueue = Volley.newRequestQueue(mActivity)
        val stringRequest = StringRequest(
            Request.Method.GET,
            API,
            Response.Listener { response ->
                Log.i("dxdiag", response)
                mView.onFetchHttpDataResult(true)
                Toast.makeText(context, response, Toast.LENGTH_LONG).show()
            },
            Response.ErrorListener { error ->
                Toast.makeText(context, error.toString(), Toast.LENGTH_LONG).show()
                Log.i("dxdiag", error.printStackTrace().toString())
                mView.onFetchHttpDataResult(false)
            })
        requestQueue.add(stringRequest)

Voici le stacktrace

2019-09-03 17:15:53.237 3308-3892/com.squadtechs.markhor.foodapp 
E/Volley: [194] BasicNetwork.performRequest: Unexpected response code 
500 for 
http://squadtechsolution.com/android/v1/allcompany.php
2019-09-03 17:15:53.243 3308-3351/com.squadtechs.markhor.foodapp 
D/EGL_emulation: eglMakeCurrent: 0xa7d84180: ver 2 0 (tinfo 
0xa7d832b0)
2019-09-03 17:15:53.256 3308-3308/com.squadtechs.markhor.foodapp 
W/System.err: com.android.volley.ServerError
2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp 
W/System.err:     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:205)2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp W/System.err:     at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:131)2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp W/System.err:     at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:111)2019-09-03 17:15:53.257 3308-3308/com.squadtechs.markhor.foodapp W/System.err:     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:90)

Voici le code PHP que j'ai écrit côté serveur:

<?php
    require 'db.php';

    $sql = "SELECT * FROM `company_profile`";
    $result = $con->query($sql);

    if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {

        $id=$row['id']; 

        $company_name=$row['company_name'];
        $cuisine=$row['cuisine'];
        $conpany_phone=$row['conpany_phone'];
        $company_description=$row['company_description']; 
        $company_logo=$row['company_logo'];
        $company_type=$row['company_type'];
        $delivery_type=$row['delivery_type'];
        $delivery_range=$row['delivery_range']; 
        $delivery_fee=$row['delivery_fee'];
        $delivery_pickupinfo=$row['delivery_pickupinfo'];
        $address=$row['address'];

        $companyData[] = array('id'=> $id,'company_name'=> 
        $company_name,'cuisine'=> $cuisine,'conpany_phone'=> 
        $conpany_phone,'company_description'=> 
        $company_description,'company_logo'=> $company_logo,'company_type'=> 
        $company_type,'delivery_type'=> $delivery_type,'delivery_range'=> 
        $delivery_range,'delivery_fee'=> 
        $delivery_fee,'delivery_pickupinfo'=> $delivery_pickupinfo,'address'=> $address);   
    }
    echo $jsonformat=json_encode($companyData);
    } else {
        echo "0 results";
    }
    $conn->close();
?>

Cette erreur "500" signifie une erreur au niveau du serveur. Ces erreurs se produisent dans les cas suivants: -

  1. Peut-être mal orthographier le paramètre ou les URL
  2. Manque de paramètre.
  3. Ou vous envoyez quelque chose qui n'est pas accepté par le serveur.
  4. Vérifiez également "http: /" ou "https: /" sur les URL.

Vérifiez ces conditions. J’ai également rencontré le même problème. Les IAP travaillent sur Post Man mais ne fonctionnent pas sur les appareils utilisant volley. J'espère que cela peut vous aider.


J'ai modifié le code un peu et vérifié dans le facteur, cela fonctionne très bien.

J'ai déplacé la déclaration de code JSON de la déclaration if.

// output data of each row
while($row = $result->fetch_assoc()) {

    $id=$row['id']; 

    $company_name=$row['company_name'];
    $cuisine=$row['cuisine'];
    $conpany_phone=$row['conpany_phone'];
    $company_description=$row['company_description']; 
    $company_logo=$row['company_logo'];
    $company_type=$row['company_type'];
    $delivery_type=$row['delivery_type'];
    $delivery_range=$row['delivery_range']; 
    $delivery_fee=$row['delivery_fee'];
    $delivery_pickupinfo=$row['delivery_pickupinfo'];
    $address=$row['address'];

    $companyData[] = array('id'=> $id,'company_name'=> 
    $company_name,'cuisine'=> $cuisine,'conpany_phone'=> 
    $conpany_phone,'company_description'=> 
    $company_description,'company_logo'=> $company_logo,'company_type'=> 
    $company_type,'delivery_type'=> $delivery_type,'delivery_range'=> 
    $delivery_range,'delivery_fee'=> 
    $delivery_fee,'delivery_pickupinfo'=> $delivery_pickupinfo,'address'=> $address);   
}
echo $jsonformat=json_encode($companyData);

$conn->close();

J'ai quelque chose d'abord importer l'okhttp à l'intérieur de la dépendance de Gradle (bibliothèque). voici la documentation

https://square.github.io/okhttp/

Après avoir ouvert le facteur et cliqué sur le menu du code

Comme vous pouvez le voir ci-dessous le bouton d'envoi, le bouton de code est là. cliquez dessus et sélectionnez le java-> okhttp

copiez le code et collez-le dans android studio. il a 99,9% de chance que cela fonctionne.


Le code d'état HTTP 500 représente l' internal server error et indique clairement que vous n'avez aucun problème côté client (ici dans votre cas Volly ), mais le problème est côté serveur. Essayez de déboguer votre code php côté serveur. le code ne s'exécute pas correctement et renvoie donc l' 500 internal server error dans l'en-tête de réponse HTTP. Volly vient de lancer l'en-tête reçu comme une erreur.

Si vous êtes un développeur backend, vous devriez d'abord essayer avec les REST Clients avant de l'intégrer à l'application mobile. Vous pouvez en obtenir un d' Here . Votre API doit être bien testée et être en état de fonctionnement, sinon vous recevrez des erreurs tout le temps.


Les codes d’état HTTP commençant par 5 indiquent que l’erreur est du côté du serveur. Le code 500 est interprété comme une erreur interne du serveur. Pour résoudre ce problème, vous devez vérifier quelle en est la cause. Cela peut être dû à une erreur dans le code. Dans ce cas, vous pouvez ouvrir votre error_log pour voir l’erreur et agir en conséquence.

Cela peut être dû au fait que les fonctionnalités du serveur sont momentanément indisponibles, comme accéder à la base de données ou que plusieurs connexions ouvertes simultanées dépassent les ressources mysql associées.

D'autres fois, l'erreur n'est pas consignée dans le fichier error_log. Si vous utilisez un panneau de configuration, sur la page d'accueil, sous l'onglet Mesures, ouvrez Erreurs et vérifiez en fonction de l'heure que vous avez demandée au serveur. Si vous n'utilisez pas cpanel, recherchez le journal du serveur correspondant.

suivez cette réponse à droite… cela peut vous aider

Comment faire face à une réponse inattendue 500 dans Android


Vérifiez votre fichier db.php , puis voyez la variable qui retourne l'objet de la connexion.

Je vois que ça devrait être $con->close() avec un n pas $conn->close() avec double n


Veuillez vérifier si tous les paramètres que vous essayez d'envoyer sont les mêmes que ceux attendus par le serveur. Les paramètres incorrects ou manquants renvoient également une erreur 500. Revérifier ce Company_mobile dans votre demande. J'espère que cela résoudra votre problème.





android-volley