Curl не отправляет POST-запрос с JSON

100
27 декабря 2020, 19:10

При отправке запроса с помощью Curl, используя данный код, при выводе $_POST получаю пустой массив , если убрать curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));, то приходит, криво, но что-то приходит, так вот, как правильно настроить Curl для корректной отправки JSON

$ch = curl_init(); 
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);    
            curl_setopt($ch, CURLOPT_PROXYPORT, $proxy_port);
            curl_setopt($ch, CURLOPT_PROXYTYPE, 'HTTP');
            curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
            curl_setopt ($ch, CURLOPT_POSTFIELDS, $dataPost);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); 
            curl_setopt($ch, CURLOPT_PROXY, $proxy);        
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $result = curl_exec($ch);
            $headerSent = curl_getinfo($ch, CURLINFO_HEADER_OUT ); 
            curl_close($ch); 
            return $result;

в $dataPost

{
                     "ID": 999999999 ,
                      "Territory": [ "1", "2" ],
                      "Country": [ "1", "2" ],
                      "BeginDate": "2018-31-05",
                      "EndDate": "2019-31-05",
                      "TripTerm": 90,
                      "Currency": 978,
                      "Option": 1,
                      "Age": [
                            {
                              "Category": 1,
                              "Count": 1
                            },
                            {
                              "Category": 2,
                              "Count": 1
                            },
                            {
                              "Category": 3,
                              "Count": 1
                            },
                            {
                              "Category": 4,
                              "Count": 0
                            },
                            {
                              "Category": 5,
                              "Count": 0
                            },
                            {
                              "Category": 6,
                              "Count": 0
                            },
                            {
                              "Category": 7,
                              "Count": 0
                            }
                        ]
                      ,
                      "Summ": 10000
                    }
Answer 1

$_POST и должен быть пустой, т.к. он заполняется только если идет запрос с параметризованным телом, например если CURLOPT_POSTFIELDS это ассоциативный массив.

В вашем случае тело запроса есть строка json поэтому на сервере получить ее можно через

file_get_contents("php://input");
READ ALSO
Docker & Php - .env (оркружающая среда)

Docker & Php - .env (оркружающая среда)

Хочу передать в php, который находится в контейнере, переменные среды, в которых содержится пароль и данные для подключения к mysql

135
Что лучше, SplFileObject или fopen и т.д.?

Что лучше, SplFileObject или fopen и т.д.?

Что лучше использовать при работе с файлами, Что лучше, SplFileObject или fopen и тд

125
Получения точного домена через PHP скрипт

Получения точного домена через PHP скрипт

У меня естьphp скрипт на хосте

125