Подтвердить что ты не робот

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, как вы можете видеть

4b9b3361

Ответ 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);