php android android-studio kotlin android-volley

php - Volley POST string request error inesperado 500



android android-studio (12)

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.


El código de estado HTTP 500 representa el internal server error , indica claramente que no tiene ningún problema en el lado del cliente (aquí en su caso Volly ) pero el problema está en el lado del servidor. Intente depurar su código php del lado del servidor. el código no se ejecuta correctamente y, por lo tanto, devuelve el 500 internal server error en el encabezado de respuesta Http. Volly acaba de lanzar el encabezado recibido como un error.

Si usted es un desarrollador de back-end, debe probarlo primero con los REST Clients antes de la integración con la aplicación móvil. Puedes conseguirlo desde Here . Su API debe estar bien probada y debe estar funcionando correctamente; de ​​lo contrario, recibirá errores todo el tiempo.


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.


Estoy publicando otra respuesta si aún no se ha resuelto. En el cartero copia todos los encabezados como

.addHeader("content-type", "application/json") .addHeader("cache-control", "no-cache") .addHeader("postman-token", "fa72f792-c9d3-7891-a544-f37f634f6ee1")

y poner eso en los voluminosos parámetros


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


Modifiqué un poco el código y lo revisé en cartero, funciona bien.

Moví la declaración de codificación JSON fuera de la declaración 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();


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.


Verifique su archivo db.php y luego vea la variable que devuelve el objeto de conexión.

Veo que debería ser $con->close() con una n no $conn->close() con doble n