GET-запросы не имеют тела, вот и вся идея: вы просто получаете что-то с сервера, а не отправляете что-то на него.Начиная с RFC 7231 :
Полезная нагрузка в сообщении запроса GET не имеет определенной семантики;отправка тела полезной нагрузки по запросу GET может привести к тому, что некоторые существующие реализации отклонят запрос.
Другими словами, запрос GET может иметь данные, но не должен.С ранее в спецификации , где GET определен как безопасный метод:
Методы запроса считаются "безопасными", если их определенная семантика по существу доступна только для чтения;т. е. клиент не запрашивает и не ожидает каких-либо изменений состояния на исходном сервере в результате применения безопасного метода к целевому ресурсу.
...
Изметоды запроса, определенные в этой спецификации, методы GET, HEAD, OPTIONS и TRACE определены как безопасные.
Если вы действительно хотите включить JSON в свой запрос GET (и отправить его разумнореализованный серверный ресурс), единственное место, куда он может пойти - это URI как часть строки запроса.Для запросов GET использование file_get_contents
намного проще, чем обращение к cURL.
<?php
$payload = json_encode(["user" => $data]);
$url_data = http_build_query([
"json" => $payload
]);
$url = "https://some.example/endpoint.php?" . $url_data;
$result = file_get_contents($url);
Если вы хотите отправить его на необоснованно реализованный ресурс сервера, инарушать дух HTTP RFC, вы можете сделать это:
<?php
$url = "https://some.example/endpoint.php";
$payload = json_encode(["user" => $data]);
$ctx = stream_context_create(["http" => [
"header"=>"Content-Type: application/json",
"content"=>$payload
]]);
$result = file_get_contents($url, false, $ctx);
Если вы решили сделать это специально с помощью cURL, вам может повезти, если для опции CURLOPT_CUSTOMREQUEST
установлено значение "GET" иCURLOPT_POSTDATA
с вашими данными.