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; } 

Как вы видите, я хочу передать тело как тело запроса, но я не знаю, правильно ли это или нет, и я не могу отлаживать это на самом деле, знаете ли вы, если это право использовать curl_setopt($ch, CURLOPT_POSTFIELDS,$body); с запросом GET?

Причина, по которой этот код исправления работает отлично с POST, теперь я пытаюсь изменить это, чтобы ПОЛУЧИТЬ, как вы можете видеть

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); 

Принятый ответ неверен. Запросы 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>"; } ?> 

вы сделали это правильно, используя

 curl_setopt($ch, CURLOPT_POSTFIELDS,$body); 

но я замечаю, что вы отсутствуете

 curl_setopt($ch, CURLOPT_POST,1);