我到处都是这个网站,没有一种方法可以解决我的问题。 基本上,我是通过cURL从SOAP响应中获得此XML的。 问题是,响应的开头和结尾都有一些奇怪的字符。
不确定我的代码出了什么问题,请看看
<?php
// error reporting
error_reporting(E_ALL - E_NOTICE);
ini_set('display_errors','On');
//header('Content-type: text/xml');
$soapUrl = "https://eins2.zurich.com.my/VIXAPI/VixService.svc?wsdl"; //URL of WSDL
// xml post structure
$xml_post_string = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:fnGetVehicleDtlsByVIX>
<!--Optional:-->
<tem:VehInputInfo>{"AgentCode":"D02940-000","ParticipantCode":"06","RequestDateTime":"2017-Mar-17 11:00:00 PM","ID":"850321-07-5179","VehNo":"WA823H","Signature":"E448A5DE70160A7C541306B38ABAE3C8826ACD262DF217F9AA8B32244374C5E2E66D26D31874BBD832E43A6A569D20F2DFE8F674AECCFD698850BEBFB13767FD"}</tem:VehInputInfo>
</tem:fnGetVehicleDtlsByVIX>
</soapenv:Body>
</soapenv:Envelope>';
$headers = array(
"POST: https://eins2.zurich.com.my/VIXAPI/VixService.svc HTTP/1.1",
"Content-type: text/xml;charset=\"UTF-8\"",
"Accept-Encoding: gzip,deflate",
"Cache-Control: no-cache",
"Pragma: no-cache",
"SOAPAction: \"http://tempuri.org/IVixService/fnGetVehicleDtlsByVIX\"",
"Content-Length: ".strlen($xml_post_string),
"Host: eins2.zurich.com.my",
"Connection: Keep-Alive"
);
$url = $soapUrl;
//print_r($headers);
// PHP cURL for https connection with auth
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($ch, CURLOPT_USERPWD, $soapUser.":".$soapPassword); // username and password - declared at the top of the doc
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// converting
$response = curl_exec($ch);
curl_close($ch);
print_r($response);
?>
谢谢。
答案 0 :(得分:1)
首先联系eins2.zurich.com.my,并将其报告为服务器中的错误,然后应予以修复。问题是使您的代码可以正常工作,直到他们修复它。.
我可以立即想到两种解决方案,
1:如果不需要的字节数是恒定的,则可以使用十六进制编辑器(如HxD)检查响应以计算有多少不需要的字节,然后使用substr()删除它们。
在这里,我在字符串末尾计算8个不需要的字节。 如果总是15字节+ 8字节,则可以这样修复:
$response=substr($response,15,-8);
如果不需要的字节从不包含<
或>
,则可以使用strpos()查找第一个<
,并使用strrpos()查找最后一个<
,并使用substr()删除之前和之后的所有内容。
例如
$response=substr($response,strpos($response,'<'));
$response=substr($response,0,strrpos($response,'>')+1);
(或者,如果您想要单线……$response=substr(($response=substr($response,strpos($response,'<'))),0,strrpos($response,'>')+1);
,但不,请不要这样做。)
<
或>
的话将不起作用...如果它们确实包含这些字节,并且不需要的字节数是可变的,那么我想不起来一个解决方案。.