首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中如何使用curl将签名的xml作为soap请求发送

在PHP中如何使用curl将签名的xml作为soap请求发送
EN

Stack Overflow用户
提问于 2021-05-28 18:11:35
回答 1查看 282关注 0票数 0

下面的curl命令运行良好。

curl --标题“内容-类型: application/soap+xml”--标题"Accept: text/xml“-标头"SOAPAction:‘”--数据-二进制@signedSoapRequest.xml http://server:8081/WebService

我正试图使用curl从PHP复制相同的内容,如下所示。但是错误代码403失败了。

代码语言:javascript
复制
    $message = <?xml version="1.0"....signed xml data...</SOAP-ENV:Envelope>
    $headers = array(
        "Content-type: text/xml;charset=\"utf-8\"",
        "Accept: text/xml",
        "Cache-Control: no-cache",
        "Pragma: no-cache",
        "SOAPAction: ''",
        "Content-length: ".strlen($message),
    );

    $result = array();

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_VERBOSE, false);
    curl_setopt($ch, CURLOPT_URL, $this->endpoint);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $message);
    $result['soap_result'] = $this->cleanXML(curl_exec($ch));

如果在$message中存储一个简单的xml,而不是像下面的curls命令那样存储签名的xml数据。curl --标题“内容-类型: application/soap+xml”--标题"Accept: text/xml“-标头"SOAPAction:‘”--data @SoapRequest.xml http://server:8081/WebService

对于这个curl coommand,PHP代码工作得很好。由于这个curl命令使用--data标志,它意味着一个文本文件/数据,而不是二进制/签名数据。

是否知道如何使用签名的xml。我试着设置内容类型:applicaton/octet,但是同样的403错误。(403)禁止

EN

Stack Overflow用户

回答已采纳

发布于 2021-05-31 19:11:45

代码curl_setopt($ch,CURLOPT_POSTFIELDS,$message);替换为curl_setopt($ch,CURLOPT_POSTFIELDS,file_get_contents('soapRequest.xml'))

它开始正常工作了。

而不是在$message变量中指定文件的值,然后在CURLOPT_POSTFIELDS中设置$message,现在使用file_get_contents()读取文件并设置CURLOPT_POSTFIELDS。

PHP cURL: how to set body to binary data?得到提示

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67743754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档