
Gustavo Alonso Medina Santiago
PreguntaPor alguna razón, mi servidor siempre me regresa un código 200, no importa si no existe el recurso o el elemento.
En mi servidor tengo el siguiente código:
/** Definimos los recursos disponbiles */ $allowedResourceTypes = [ 'books', 'authors', 'genres' ]; /** Validamos si el recurso solicitado está disponivlo */ $resourceType = $_GET['resource_type']; if (!in_array($resourceType, $allowedResourceTypes)) { http_response_code(400); die; }
Y mi cliente se compone de lo siguiente:
<?php $ch = curl_init($argv[1]); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); switch ($httpCode) { case 200: echo 'Todo bien!'; break; case 400: echo 'Pedido incorrecto.'; break; case 404: echo 'Recurso no encontrado'; break; case 500: echo 'El servidor falló'; break; default: # code... break; }
Sin embargo cuando ejecuto en mi consola
php client.php http://localhost:8000/bo
Me regresa un código 200, cuando me debería regresar un código 400
No sé que pueda ser 😕

Luis José Cruz Martínez
Lo solucioné con la respuesta de @joex45125 Por aquí cito su respuesta: Para el que le sirva lo solucione comentando la validación por tokens supongo que devolvía 200 antes de llegar a validar los recursos y realmente en este ejercicio no se esta usando.

Eduardo Reyes
Tengo el mismo problema, es codigo es exactamente el mismo del profesor y los comandos también, pero siempre regresa un codigo 200, incluso poniendo /bo o /adjandlkanmdlaksd siempre regresa lo mismo, pero al hacer la consulta para que me regrese el .jason si funciona.

Gustavo Alonso Medina Santiago
Pero para esto se usa la función
http_response_code(400)
¿No es así? Verifico si el recurso lógico solicitado está en el arreglo de recursos lógicos disponibles, y si no es así, envío un http_response_code(400)

Jose Aaron Chavez Soto
Te regresa el código 200, porque tu archivo servidor.php al cual le haces la petición siempre existe.
Lo que no existe es el "recurso: bo" que en realidad a nivel de código es un parámetro que se pasa mediante el método GET a tu archivo servidor.php, si dicho parámetro no es "books", "authors" o "genres" significa que simplemente "bo" no forma parte de ese arreglo.
TAMBIÉN SE PUEDE VER DE ESTA OTRA FORMA: servidor.php es un ++recurso real++ en el servidor. "books", "authors", "genres" son ++recursos lógicos++.
Entonces los códigos HTTP como el 200 verifican la existencia de ++recursos reales++, no de recursos lógicos. PHP se encarga de verificar la existencia de los ++recursos lógicos++ mediante funciones como in_array() y regresando true o false si existe o no existe dicho ++recurso lógico++.