How to Pass JSON Data in a URL using CURL in PHP ?
In this article, we will see how to pass the JSON Data in a URL using CURL in PHP, along with understanding the different ways for passing the data in a URL through the illustrations. The cURL stands for client URL, which allows us to connect with other URLs & use their responses in our code, i.e., it is a tool for sending and getting files using URL syntax. The cURL facilitates the way that can hit a URL from our code to get an HTML response from it. The cURL is also used in command lines or scripts for data transfer. Here, we need to pass JSON data in a URL using cURL in PHP and handle the POST request. This task can be accomplished with the help of the following ways:
We will explore all the above approaches & understand them through examples.
Syntax for passing JSON data in a URL using cURL:
Approach for POST Request:
- We need to specify the URL, where the JSON data need to be sent.
- Using curl_init(), we initialize cURL.
- Put JSON data in a PHP array and set up JSON data.
- And using json_encode() encode it into JSON string.
- Setting the options for the cURL.
- Fetching $url using CURLOPT_URL.
- Switching request type from get to post using CURLOPT_POST.
- Now attach the encoded string in the post field using CURLOPT_POSTFIELDS.
- Setting the curl option RETURNTRANSFER to true so that it returns the response instead of just outputting it.
- Using the CURLOPT_HTTPHEADER set the Content-Type to application/JSON.
Example 1: This example illustrates passing the JSON Data in a URL using cURL in PHP by using the cURL POST Request.
PHP
Employee: Aman Job: Data Scientist Company: GeeksForGeeks id: 553 createdAt: 2022-12-02T12:32:42.420Z
Approach for GET Request:
- We need to specify the URL, Where the JSON data is going to be sent.
- Using curl_init() we initialize cURL.
- Next, we have to set options for the cURL.
- Fetching $url using CURLOPT_URL.
- Setting the curl option RETURNTRANSFER to true so that it returns the response instead of just outputting it.
- Setting multiple options for a cURL session. Using the curl_setopt_array() function, setting a large number of options for cURL without repetitively calling it.
- Using curl_exec() to execute the GET request.
- Decode the response and Return the response as a string.
- Close the cURL.
Example 2: This example illustrates passing the JSON Data in a URL using cURL in PHP by using the cURL GET Request.
PHP
Array ( [page] => 2 [per_page] => 6 [total] => 12 [total_pages] => 2 [data] => Array ( [0] => Array ( [id] => 7 [email] => michael.lawson@reqres.in [first_name] => Michael [last_name] => Lawson [avatar] => https://reqres.in/img/faces/7-image.jpg ) [1] => Array ( [id] => 8 [email] => lindsay.ferguson@reqres.in [first_name] => Lindsay [last_name] => Ferguson [avatar] => https://reqres.in/img/faces/8-image.jpg ) [2] => Array ( [id] => 9 [email] => tobias.funke@reqres.in [first_name] => Tobias [last_name] => Funke [avatar] => https://reqres.in/img/faces/9-image.jpg ) [3] => Array ( [id] => 10 [email] => byron.fields@reqres.in [first_name] => Byron [last_name] => Fields [avatar] => https://reqres.in/img/faces/10-image.jpg ) [4] => Array ( [id] => 11 [email] => george.edwards@reqres.in [first_name] => George [last_name] => Edwards [avatar] => https://reqres.in/img/faces/11-image.jpg ) [5] =>Array ( [id] => 12 [email] => rachel.howell@reqres.in [first_name] => Rachel [last_name] => Howell [avatar] => https://reqres.in/img/faces/12-image.jpg ) ) [support] => Array ( [url] => https://reqres.in/#support-heading => To keep ReqRes free, contributions towards server costs are appreciated! ) )
Approach for PUT Request:
- We need to specify the URL, where the JSON data need to be sent.
- Using curl_init(), we initialize cURL.
- Put JSON data in a PHP array and set up JSON data.
- And using json_encode() encode it into JSON string.
- Setting the options for the cURL.
- Fetching $url using CURLOPT_URL.
- Now attach the encoded string in the post field using CURLOPT_POSTFIELDS.
- Setting the curl option RETURNTRANSFER to true so that it returns the response instead of just outputting it.
- Using the CURLOPT_HTTPHEADER set the Content-Type to application/JSON.
Example 3: This example illustrates passing the JSON Data in a URL using cURL in PHP by using the cURL PUT Request.
Базовая работа с PHP cURL: GET, POST, JSON, Headers
cURL — это программное обеспечение, которое позволяет выполнять запросы разных типов или протоколов. И как раз cURL помогает нам писать боты и парcеры на PHP, автоматизируя шаблонные HTTP-запросы, и собирая большое количество данных автоматизировано. PHP имеет встроенные инструменты по удобной работе с cURL.
PHP cURL основы
curl_init(); // инициализирует сессию работы с cURL curl_setopt(. ); // изменяет поведение cURL-сессии, в соответствии с переданными опциями curl_exec(); // выполняет cURL запрос по сконфигурированной сессии, и возвращает результат curl_close(); // закрывает сессию cURL и удаляет переменную, которой присвоен curl_init();
- curl_init ([ string $url = NULL ] ) — с него начинается инициализация сессии cURL
- curl_setopt ( resource $ch , int $option , mixed $value ) — конфигурирование настроек текущей сессии cURL
- curl_exec ( resource $ch ) — выполняем запрос, получаем результат
- curl_close ( resource $ch ) — закрытие сессии. В реальности, можно игнорировать выполнение curl_close(), так как PHP сделает это за нас, после выполнения скрипта
Отправка GET запроса из PHP cURL
Здесь всё просто, PHP cURL GET запрос — это самое простое, что можно придумать.
// URL страницы, которую открываем $url = 'https://orkhanalyshov.com'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch);
В результате выполнения этого кода, переменной $response будет присвоен ответ от сервера, к которому мы стучались (в основном — это HTML или JSON).
Иногда стоит необходимость отправки GET-запроса, формируя URL-адрес из Query-параметров. Для таких случаев, можете воспользоваться встроенной PHP-функцией, формирующей URL-строку с параметрами из массива:
$queryParams = [ 'category' => 14, 'page' => 2, ]; $url = 'https://alishoff.com/?' . http_build_query($queryParams); echo $url; // https://alishoff.com/?category=14&page=2
Отправка POST запроса из PHP cURL
PHP cURL POST запрос обычно не выполняется с пустым телом. Запрос этого типа считается запросом на добавление данных (создание новой сущности в БД, к примеру) и обычно нам необходимо передавать серверу набор каких-то данных. Код отправки POST-запроса с передачей данных будет выглядеть так:
// данные POST-запроса $data = [ 'name' => 'John', 'email' => 'john@doe.com', 'body' => 'Hello, World!', 'verifyCode' => 'cugifu', ]; // url, на который отправляет данные $url = 'https://alishoff.com/contact'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $response = curl_exec($ch); curl_close($ch); var_dump($response);
Отправка cURL запроса из PHP с собственными заголовками (PHP cURL Headers)
Для того, чтобы передать дополнительные, собственные заголовки, нужно с помощью функции curl_setopt() задать опцию CURLOPT_HTTPHEADER, передав массив заголовков в формате Name: Header value:
curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Custom-Header-1: The-Header-Value-1', 'Custom-Header-2: The-Header-Value-2' ]);
Отправка POST JSON запроса в PHP cURL
Очень часто, при написании ботов, имитирующих взаимодействие с API, приходится отправлять данные на целевой сервер в формате JSON. И так сложилось, что отправка Form-Data POST параметров отличается от алгоритма отправки JSON данных, потому, и передавать эти данные для cURL нужно по-другому.
Для того, чтобы корректно передать данные в формате JSON через PHP cURL, необходимо исходный массив с параметрами, перекодировать в JSON вручную, и заполнить этими данными тело (body) запроса. А так же, чтобы сервер понял, что это данные в формате JSON, нужно передать соответствующие HTTP-заголовки (о которых мы говорили выше).
$data = [ 'site' => 'https://orkhanalyshov.com', 'action' => 'notify', 'email' => 'john@doe.com', ]; $dataString = json_encode($data); $url = 'http://localhost/handler.php'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($dataString) ]); $result = curl_exec($ch); curl_close($ch);
Основной принцип передачи данных в JSON с помощью cURL заключается в том, что нужно выполнить POST запрос, тело которого заполнить закодированными в JSON данными, после чего, указать соответствующий заголовок позволяющий серверу понять, что ему на обработку пришли JSON данные.