Не выходит получить XML из POST запроса Curl

123 4
krek753
На сайте с 15.12.2008
Offline
104
810
Отправляю XML
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://domen.com/api',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'<?xml version="1.0" encoding="UTF-8"?>
<EchoRequest>
<message>Test</message>
</EchoRequest>',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/xml'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

Получаю запрос

<?php

$dataPOST = trim(file_get_contents('php://input'));

$xmlData = simplexml_load_string($dataPOST);

print_r ($xmlData);

echo "Принято";

?>

$xmlData - пустой, возвращается только " Принято ".

Подскажите пожалуйста, что не так делаю?





















I7
На сайте с 12.06.2008
Offline
365
#1

Попробуйте из интереса XML-документ передать в виде значения параметра, например, параметра xml.

Также посмотрите, до использования simplexml_load_string в $dataPOST есть какое-то содержимое?

krek753
На сайте с 15.12.2008
Offline
104
#2
Ilya74 #:
XML-документ передать в виде значения параметра

1. Я не могу передать документ.
2. Пусто.

W1
На сайте с 22.01.2021
Offline
306
#3
krek753 :
что не так делаю?

Данные при запросе POST передаются в виде пар "имя: значение". А у вас что-то непонятное передаётся. Как и принимается, впрочем.

Мой форум - https://webinfo.guru –Там я всегда на связи
T7
На сайте с 19.09.2018
Offline
63
#4
krek753 :
$dataPOST = trim(file_get_contents('php://input'));

CURLOPT_CUSTOMREQUEST => "PUT"
lutskboy
На сайте с 22.11.2013
Offline
180
#5
CURLOPT_POST true
lutskboy
На сайте с 22.11.2013
Offline
180
#6
webinfo #:

Данные при запросе POST передаются в виде пар "имя: значение". А у вас что-то непонятное передаётся. Как и принимается, впрочем.

можно и не только имя: значение

T7
На сайте с 19.09.2018
Offline
63
#7
timo-71 #:
CURLOPT_CUSTOMREQUEST => "PUT"

Ну и версия php. На 8 все хорошо и с ПОСТ.

php клиент


php сервер


Python сервер


Результат


W1
На сайте с 22.01.2021
Offline
306
#8
lutskboy #:

можно и не только имя: значение

Например?

В любом случае данные ожидаются как набор пар  "имя: значение". Если в качестве данных отправляется простая строка (без разделения на пары "имя: значение"), то подразумевается пустое значение. В данном случае это какое-то извращение.

T7
На сайте с 19.09.2018
Offline
63
#9
webinfo #:
В любом случае данные ожидаются как набор пар  "имя: значение"
Не обязательно.
W1
На сайте с 22.01.2021
Offline
306
#10
timo-71 #:
Не обязательно.

То есть? Расскажите мне, чего я не знаю про $_POST.

Ваш php://input - это именно костыль, потому что использование  $_POST в данном случае некорректно.

И CURLOPT_POSTFIELDS подразумевает массив данных, даже само название  POSTFIELDS об этом говорит. Поэтому то, что понаписано выше - говнокод.

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий