PHP cURL получить запрос и тело запроса
Я пытаюсь использовать cURL для запроса GET следующим образом:
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;
}
Как вы видите, я хочу передать $body как тело запроса, но я не знаю, правильно ли это или нет, и я не могу отладить это на самом деле, знаете ли вы, имеет ли право использовать curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
с запросом GET?
потому что этот код enteire отлично работает с POST, теперь я пытаюсь изменить это, чтобы получить, как вы можете видеть
5 ответов
CURLOPT_POSTFIELDS
как следует из названия, для тела (полезной нагрузки)POST
запрос. Для GET
запросы, груз является частью URL-адреса в виде строки запроса.
в вашем случае вам нужно создать URL-адрес с аргументами, которые вам нужно отправить (если таковые имеются), и удалить другие параметры для скручивания.
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);
принятый ответ неверен. GET
запросы действительно могут содержать тела. Это решение реализовано WordPress, например:
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $body );
EDIT: чтобы уточнить, начальный curl_setopt
не является необходимым в этом случае, но не наносит вреда. Он был включен, чтобы полностью проиллюстрировать пример кода, на который ссылаются.
<?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>";
}
?>
для тех, кто приходит к этому с аналогичными проблемами,эта библиотека запросов позволяет сделать внешние http-запросы кажущимися в вашем php-приложении. Упрощенные запросы GET, POST, PATCH, DELETE и PUT.
запрос образца был бы как ниже
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
документация для этого же можно найти в проекте README.md
вы сделали это правильно, используя
curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
но я заметил, что недостающие
curl_setopt($ch, CURLOPT_POST,1);