file_get_contents - php send request
PHP cURL GET solicitud y cuerpo de solicitud (5)
Estoy tratando de usar cURL para una solicitud GET como esta:
function connect($id_user){
$ch = curl_init();
$headers = array(
''Accept: application/json'',
''Content-Type: application/json'',
);
curl_setopt($ch, CURLOPT_URL, $this->service_url.''user/''.$id_user);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);
$body = ''{}'';
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Timeout in seconds
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$authToken = curl_exec($ch);
return $authToken;
}
A medida que ve, quiero pasar $ body como el cuerpo de la solicitud, pero no sé si es correcto o no y no puedo depurar esto en realidad, ¿sabe si es correcto usar curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
con una solicitud GET?
Porque este código de enteire funciona perfectamente con POST, ahora estoy intentando cambiar esto a GET como puedes ver
La respuesta aceptada es incorrecta. GET
solicitudes GET
pueden contener un cuerpo. Esta es la solución implementada por WordPress , como ejemplo:
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, ''GET'' );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $body );
EDITAR: Para aclarar, el curl_setopt
inicial no es necesario en esta instancia, pero no hace daño. Se incluyó para ilustrar completamente el código de ejemplo al que se hace referencia.
Lo has hecho de la manera correcta usando
curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
pero noto tu falta
curl_setopt($ch, CURLOPT_POST,1);
Para aquellos con problemas similares, esta biblioteca de solicitudes le permite realizar solicitudes http externas de forma aparente dentro de su aplicación php. Simplificar las solicitudes GET, POST, PATCH, DELETE y PUT.
Una solicitud de muestra sería la siguiente
use Libraries/Request;
$data = [
''samplekey'' => ''value'',
''otherkey'' => ''othervalue''
];
$headers = [
''Content-Type'' => ''application/json'',
''Content-Length'' => sizeof($data)
];
$response = Request::post(''https://example.com'', $data, $headers);
// the $response variable contains response from the request
La documentación para el mismo se puede encontrar en el README.md del proyecto README.md
CURLOPT_POSTFIELDS
como su nombre indica, es para el cuerpo (carga útil) de una solicitud POST
. Para las solicitudes GET
, la carga útil es parte de la URL en forma de una cadena de consulta.
En su caso, debe construir la URL con los argumentos que necesita enviar (si corresponde) y eliminar las otras opciones a cURL.
curl_setopt($ch, CURLOPT_URL, $this->service_url.''user/''.$id_user);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);
//$body = ''{}'';
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
//curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
<?php
$post = [''batch_id''=> "2"];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,''https://example.com/student_list.php'');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
$response = curl_exec($ch);
$result = json_decode($response);
$new= $result->status;
if( $new =="1")
{
echo "<script>alert(''Student list'')</script>";
}
else
{
echo "<script>alert(''Not Removed'')</script>";
}
?>