@xafes

Отправление при помощи curl post запроса с данными в xml?

Есть некий XML и ссылка на сторонний сервис:
$url = 'https://example.com/';
$xml = '<?xml version="1.0" encoding="UTF-8" ?>
            <Request>
              <Language>ru</Language>
            </Request>';

Если отправить xml через форму:
<form method="post" action="https://example.com/">
  <textarea name="Request"><?php echo $xml; ?></textarea>
  <button>Submit</button>
</form>

То сервер возвращает данные на основе отправленных в xml.
Пытаюсь тоже самое сделать с помощью curl:
function sendXmlOverPost($url, $xml) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);

  $result = curl_exec($ch);
  curl_close($ch);
  return $result;
}
print_r(sendXmlOverPost($url, $xml));

Возвращается ошибка, System error!
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
nokimaro
@nokimaro Куратор тега PHP
Проблема в том что из формы вы посылаете данные как Request=XXXXXXXXX потому что textarea name="Request", а в curl отправляете данные в виде raw post data.

Правильный вариант отправки, схожий с тем как данные отправляли из формы ниже
Content-Type: text/xml за который прицепился FanatPHP роли не играет, и его можно не отправлять.

function sendXmlOverPost($url, $xml) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['Request' => $xml]));

  $result = curl_exec($ch);
  curl_close($ch);
  return $result;
}
print_r(sendXmlOverPost($url, $xml));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@FanatPHP
А зачем ты пишешь в курле странные слова Content-Type: text/xml?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы