Я пытаюсь использовать 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);