Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP CURL未在post方法中发送xml_Php_Xml_Curl - Fatal编程技术网

PHP CURL未在post方法中发送xml

PHP CURL未在post方法中发送xml,php,xml,curl,Php,Xml,Curl,我正试图使用一家电信运营商的API文档与他们联系 我需要向他们发送XML请求(POST)以及GET方法中的一些凭证 我构建了我的脚本并发布了XML,但他们说他们没有收到任何XML <?php $url = "http://<IP>:<PORT>/C2SReceiver?LOGIN=abc&PASSWORD=123"; $xml = '<?xml version="1.0"?> <COMMAND>

我正试图使用一家电信运营商的API文档与他们联系

我需要向他们发送XML请求(POST)以及GET方法中的一些凭证

我构建了我的脚本并发布了XML,但他们说他们没有收到任何XML

<?php
$url = "http://<IP>:<PORT>/C2SReceiver?LOGIN=abc&PASSWORD=123";
$xml = '<?xml version="1.0"?>
        <COMMAND>
            <TYPE>k59</TYPE>
            <DATE>19/03/2015 23:20:20</DATE>
            <PIN>11000009</PIN>
            <LOGINID>abc</LOGINID>
            <PASSWORD>123</PASSWORD>
            <EXTCODE>0100</EXTCODE>
            <EXTREFNUM>1230567890</EXTREFNUM>
        </COMMAND>';

    $headers = array(
        "Content-type: text/xml",
        "Content-length: " . strlen($xml),
        "Connection: close",
    );
    // configure
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    // requesting
    $data = curl_exec($ch); 
    // displaying response in XML
    echo $data;
    if(curl_errno($ch))
        print curl_error($ch);
    else
        curl_close($ch);
?>

当我发送请求时,他们的系统会说:“来自HashMap的消息格式无效。”

他们说,他们只是通过get方法获取参数。他们没有收到任何XML

请注意:如果我更改xml格式,他们的系统响应为“无效xml”。

如果他们没有得到我的XML,他们怎么能说它无效呢

我浪费了一整天来解决这个问题。不知道出了什么问题。请看一看,并建议我可以做什么,从我的结束


谢谢。

尝试将标题内容类型从text/xml->application/xml更改。执行HTTP请求时,在我的CURLOPT_HTTPHEADER上:

    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));

您的代码没有任何错误。我对其进行了测试,在C2SReceiver.php文件中获得了xml格式的数据。我只使用此代码获取xml格式的数据

<?php $x = new SimpleXmlElement(file_get_contents('php://input')); print_r($x);die(); ?>



要获取C2SReceiver.php中由curl传递的xml数据,请尝试但响应相同。不要手动添加内容长度标题,弄乱标题的可能性很大,如果不手动添加,curl会自动处理此问题,而curl弄乱标题的可能性比弄乱标题的可能性小得多不要添加标题“Connection:close”标题,应该只设置CURLOPT_bank_REUSE=>true,这就是为什么它存在的原因,我相信我删除了内容长度,仍然是同一个错误。还有其他可能的修复方法吗?我删除了Connection:close,仍然是同一个错误。是的,你有任何实际工作的实现吗?监视它,使用防火墙或Fiddler代理(如果它的SSL/TLS是加密的,fiddler有一个伟大的中间人攻击来监视这个流量的解密版本,对应用程序来说是不可见的),或者WPE Pro,然后监视您自己的curl实现并比较差异,一定会有所不同,找出在C2SReceiver.php中获取curl传递的xml数据的原因
<?php $x = new SimpleXmlElement(file_get_contents('php://input')); print_r($x);die(); ?>