PHP cURL GET запрос и тело запроса
Я пытаюсь использовать 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?
Причина, по которой этот код подделки работает отлично с POST, теперь я пытаюсь изменить это на GET, как вы можете видеть
Ответы
Ответ 1
CURLOPT_POSTFIELDS
, как следует из названия, для тела (полезной нагрузки) запроса POST
. Для запросов GET
полезная нагрузка является частью URL-адреса в форме строки запроса.
В вашем случае вам нужно создать URL-адрес с аргументами, которые необходимо отправить (если есть), и удалить другие параметры в 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);
Ответ 2
Принятый ответ неверен. GET
запросы действительно могут содержать тело. Это решение реализованное WordPress, в качестве примера:
curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $body );
РЕДАКТ. Чтобы уточнить, исходный curl_setopt
в этом случае не нужен, но не наносит вреда. Он был включен, чтобы полностью проиллюстрировать ссылочный код примера.
Ответ 3
<?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);
curl_close($ch); // Close the connection
$new= $result->status;
if( $new =="1")
{
echo "<script>alert('Student list')</script>";
}
else
{
echo "<script>alert('Not Removed')</script>";
}
?>
Ответ 4
Для тех, кто сталкивается с подобными проблемами, эта библиотека запросов позволяет без лишних усилий выполнять внешние 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
Ответ 5
вы сделали это правильно, используя
curl_setopt($ch, CURLOPT_POSTFIELDS,$body);
но я замечаю ваш недостающий
curl_setopt($ch, CURLOPT_POST,1);