Я пытаюсь отправить XML-сообщение из php для ответа asp и вывода на мою php-страницу, используя CURL, но не получив ответа. Вот что я пробовал:
<?php $url = "https://someweb.asp"; $post_string = "xmlmessage=<?xml version='1.0' encoding='UTF-8'?> <abc> <UserId>123</UserId> </abc>"; //$header = "POST HTTPS/1.0 \r\n"; $header = "Content-type: text/xml \r\n"; $header .= "Content-length: ".strlen($post_string)." \r\n"; $header .= "Content-transfer-encoding: text \r\n"; $header .= "Connection: close \r\n\r\n"; $header .= $post_string; $ch = curl_init($url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 4); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header); $output = curl_exec($ch); $info = curl_getinfo($ch); if ($output == false || $info['http_code'] != 200) { $output = "No cURL data returned for $url [". $info['http_code']. "]"; if (curl_error($ch)) $output .= "\n". curl_error($ch); } else {curl_close($ch);} echo $output; ?>
Может ли кто-нибудь направить меня туда, где я ошибаюсь?
Не создавайте пользовательский запрос для простого POST. CURL отлично умеет делать пост без всех этих махинаций:
$xml = <<<EOL <?xml version='1.0' encoding='UTF-8'?> <abc> <UserId>123</UserId> </abc> EOL; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, array('xmlmessage' => $xml)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 4); $result = curl_exec($ch); if ($result === FALSE) { die(curl_error($ch)); } echo $result
$post_string = "xmlmessage=<?xml version='1.0' encoding='UTF-8'?> <abc> <UserId>123</UserId> </abc>";
поменять двойные и одинарные кавычки
$post_string = 'xmlmessage=<?xml version="1.0" encoding="UTF-8"?> <abc> <UserId>123</UserId> </abc>';
одинарные кавычки недействительны в разметке xml