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.
Este error "500" significa un error en el servidor. Este error ocurre en estos casos: -
- Puede estar mal escrito en el parámetro o URL
- Falta de parámetro.
- O está enviando algo que el servidor no acepta.
- 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
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