使用API​​发送XML发布请求

时间:2018-07-13 18:21:24

标签: php xml api curl cloud

我正在尝试发出一个xml post请求,该请求命中另一个服务器url并为其发送xml数据,但是我的代码对我不起作用

if ($mail->send()) {
        $URL = "server link api based";

        $ch = curl_init($URL);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml','Content-Length:     ' . strlen($xml)));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
      //  echo $output;
        if ($output) {
            echo "1";
        } else {
            echo "2";
        }
    }
} catch (Exception $e) {
    echo $e;
}

数据的XML格式是xml格式的代码

$xml = '<?xml version="1.0" encoding="UTF-8"?>
    <data>
    <lead>
       <key>YaskjdfweuYksdlksid....</key>
    <leadgroup>.....</leadgroup>
    <site>.....</site>
    <introducer>0</introducer>

    <source>FDH Quick submission</source>
    <medium>FDH Quick submission</medium>

          <firstname>' . $firstName . '</firstname>
          <lastname>' . $lastName . '</lastname>
          <email>' . $userEmail . '</email>
          <postcode>' . $postCode . '</postcode>
          <contactphone>Yes</contactphone>
          <phone1>' . $userPhoneNo . '</phone1>
   </lead>
</data>';

1 个答案:

答案 0 :(得分:1)

1个可能的问题是,在将字符串插入XML时没有转义字符串,这可能会使您留下损坏的XML文件(例如,&必须转义为&amp;<必须成为&lt;'必须成为&apos;,依此类推)

您可以使用以下功能对字符串进行xml编码:

function xml_esacpe(string $str, string $charset = 'UTF-8'): string {
    if (! strlen ( $str )) {
        return "";
    }
    $ret = htmlspecialchars ( $str, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_XML1, $charset, true );
    if (! strlen ( $ret )) {
        throw new Exception ( "failed to xml-encode input! (most likely wrong charset or corrupted input)" );
    }
    return $ret;
}

此外,您可以执行$isValidXML=@((new DOMDocument())->loadXML($xml));来验证XML是否有效-如果xml有效,则现在为true;如果xml无效,则为false。 -您要发送的xml实际上是有效的xml吗?

但是无论如何,您必须详细说明the code not working for me的意思-如何不起作用?