php - Volley POST string request error inesperado 500




android android-studio (8)

Estoy usando la biblioteca Volley en mi proyecto y Unexpected response code 500 como respuesta.

He buscado a fondo stackoverflow y todavía no puedo encontrar una solución que funcione.

El siguiente es mi código para hacer una solicitud de cadena 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)

El siguiente es el 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)

El siguiente es el código PHP que escribí en el lado del servidor:

<?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();
?>

@Muhammad Faizan ignora tus dudas, el problema IS un error del servidor 500

ESTA ES LA CAUSA

  • POSTMAN y VOLLEY no son lo mismo
  • a) hay un error en su código PHP or B) hay una configuración de entorno que esto expone

PARA DIAGNOSTICAR UN PROBLEMA PHP

y necesitas abrir tu error_log en php. Dependiendo de su servidor, esto puede ser complicado de explicar cómo, de otra manera, cambiar php.ini a error_log para hacer esto intente esto EN EL SERVIDOR

( levantado de aquí deliberadamente )

/*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

PARA DIAGNOSTICAR UN PROBLEMA AMBIENTAL EN EL SERVIDOR

Si el error_log no produce nada, intente con access_log . ¿Por qué? Porque probablemente mostrará que se ha recibido un tipo diferente de solicitud. POSTMAN y VOLLEY no son lo mismo

Necesitas mirar tu access_log demasiado potencialmente y verlo en tiempo real mientras haces clic en cartero y luego haces clic en el cliente de volley

HECHOS: (por qué podemos estar tan seguros)

Mi instinto dice que tienes un problema en un servidor mal configurado. Lo creas o no, access_log te ayudará más si este es el caso.

Independientemente: hay claramente un problema entre lo que está poniendo en POSTMAN y lo que está enviando su cliente de voleo, que está causando esto.

Las cosas que he visto porque esto incluyen:

  • Podría ser un error SAME ORIGIN .
  • Podría ser un problema de INTERNAL SERVER REDIRECT .
  • Podría ser un reenvío impreciso de $ _GET a $ _POST (he visto ese problema en nginx)
  • Podría ser un problema de mal camino que se está destrozando no-redirect y falta de seguridad.

pero sin decirnos la plataforma o el servidor (Windows? Linux? nginx? php-fpm? apache? etc.) no podemos ayudarlo en esos


Compruebe si todos los parámetros que está intentando enviar son los mismos que el servidor espera. También los parámetros incorrectos o faltantes devuelven 500 Error. Vuelva a verificar este parámetro Company_mobile en su solicitud. Espero que esto resuelva tu problema.


Elimine la línea de abajo de su código del lado del servidor y verifique

echo $jsonformat=json_encode($companyData);

y lo mismo no funciona en cartero también


Este error "500" significa un error en el servidor. Este error ocurre en estos casos: -

  1. Puede estar mal escrito en el parámetro o URL
  2. Falta de parámetro.
  3. O está enviando algo que el servidor no acepta.
  4. También marque "http: /" o "https: /" en las URL.

Verifique estas condiciones. También me he enfrentado al mismo problema. Las API están trabajando en Post Man pero no en dispositivos que utilizan voleas. Espero que esto te pueda ayudar.


Intente incluir en su archivo php:

header('Content-Type: application/json');
header("Access-Control-Allow-Origin: *");

No estoy familiarizado con Kotlin pero está funcionando bien para mí usando Java, aquí está el código:

private void loadRecyclerViewData2(){
        URR_DATA="http://squadtechsolution.com/android/v1/allcompany.php";
        StringRequest stringRequest = new StringRequest(Request.Method.GET,
                URR_DATA,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        System.out.println("****"+response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        System.out.println("***"+error.getMessage());                    }
                });
        requestQueue = Volley.newRequestQueue(Home.this);
        requestQueue.add(stringRequest);
    }

Y obtengo el siguiente resultado:

I/System.out: ****
    [{"id":"1","company_name":"ABC","cuisine":"QATAR","conpany_phone":"4535345","company_description":"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ","company_logo":"company_logo5d80bac690f2e.png","company_type":"Food","delivery_type":"yes","delivery_range":"55","delivery_fee":"","delivery_pickupinfo":"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, ","address":"33.58539655788556,71.43779296427965"}]

Los códigos de estado HTTP que comienzan con 5 informan que el error está en el lado del servidor. El código 500 se interpreta como Error interno del servidor, para resolver esto debe verificar qué puede causarlo. Puede ser causado por un error en el código en ese caso, puede abrir su error_log para ver el error y actuar en consecuencia.

Puede deberse a que las funciones del servidor no están disponibles momentáneamente, como acceder a la base de datos o tener muchas conexiones abiertas simultáneas que exceden los recursos mysql asociados.

Otras veces, el error no se registra en el archivo error_log. Si usa un cpanel, en la página de inicio, en la pestaña Métrica, abra Errores y verifique de acuerdo con la hora que solicitó al servidor. Si no está utilizando cpanel, busque el registro del servidor correspondiente.

siga esta respuesta de marca correcta ... puede ayudarlo

Cómo lidiar con la respuesta inesperada 500 en Android


Su problema probablemente sea de ContentType

agregas esto:

@Override
            public String getBodyContentType() {
                return "application/x-www-form-urlencoded";
            }

o

return "application/json"

Si el problema no se resuelve, debe usar JsonObjectRequest


Tengo algo Primero importe el okhttp dentro de la dependencia de Gradle (Biblioteca). aqui esta la documentacion

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

Después de abrir el cartero y hacer clic en el menú de código

Como puede ver debajo del botón de envío, el botón de código está allí. haga clic y seleccione el java-> okhttp

Copie el código y péguelo dentro de Android Studio. Tiene un 99.9% de posibilidades de que funcione.





android-volley