it-swarm.com.ru

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?

Потому что этот код Enteire прекрасно работает с POST, теперь я пытаюсь изменить это на GET, как вы можете видеть

19
itsme

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);
25
Burhan Khalid

Принятый ответ неверен. GET запросы действительно могут содержать тело. Это решение реализовано в WordPress , например:

curl_setopt( $ch, CURLOPT_CUSTOMREQUEST, 'GET' );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $body );

Правка: Чтобы уточнить, начальный curl_setopt в этом случае не является необходимым, но не причиняет вреда. Это было включено, чтобы полностью иллюстрировать пример кода, на который ссылаются.

19
Dan
  <?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>";
  }

  ?>
4
Siddharth Shukla

Для тех, кто сталкивается с подобными проблемами, эта библиотека запросов позволяет без особых усилий выполнять внешние 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

0
Danny Sofftie