【发布时间】:2019-03-04 02:16:52
【问题描述】:
这是我正在使用的方法:
$xml_data = 'XML data';
$headers = array(
"POST /ws_autos.asmx HTTP/1.1",
"Host: (web service url)",
"Content-Type: text/xml; charset=utf-8",
"SOAPAction: \"http://tempuri.org/(web service method)\"",
"Content-length: ".strlen($xml_data)
);
$url = (web service url)?wsdl;
$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_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data);
$reply = curl_exec($ch);
$xmli = new SimpleXMLElement($reply);
print_r($reply);
print_r($xmli);
我在执行时收到错误请求错误,但没有得到澄清。我检查了 XML 正文是否有错误,但似乎没有,据我所知,标题中没有任何不合适的地方。
我尝试过使用 SoapClient,但我找不到任何关于构建 XML 主体的文档/资源,这里有大量的嵌套。
【问题讨论】:
-
curl 不是套接字客户端,它们中的大多数标头都不起作用,并且 POSTFIELDS 期望的是数组或查询字符串而不是 XML 块
-
我认为它可能会起作用,因为它被选为网站上另一个问题的答案,还因为我才刚刚开始学习一般的 SOAP 和 Web 服务,所以我不知道好的折扣。你知道我在哪里可以找到任何可以帮助我在这个特定问题上找到正确方向的文档吗?
-
我会使用一个从 wsdl 生成模型的库,尽管有手动方法,google.com/search?q=soap+client+php+site:stackoverflow.com
-
@LawrenceCherone 实际上你错了,如果你希望你的 HTTP POST 正文是一个原始 XML 文件,然后将 XML 文件作为字符串发送到 CURLOPT_POSTFIELDS 并将
Content-Type标头设置为 XML,他正确地完成了那部分。 - 只有当您想使用Multipart/form-data-format 时,您才将 CURLOPT_POSTFIELDS 设置为数组
标签: php xml web-services curl soap