使用SOAP确定n00b,
想要了解如何使用SOAP。
问题:
我有一个Java JSP,它将WSDL(看起来像XML格式)发布到我的PHP脚本中,但是如何在PHP脚本中获取它?每次WSDL的URL都不同。
我确定这很简单,但是我看不出我是怎么理解这个?
答案 0 :(得分:6)
您可以尝试这样的事情:
try { if (!($xml = file_get_contents('php://input'))) { throw new Exception('Could not read POST data.'); } } catch (Exception $e) { print('Did not successfully process HTTP request: '.$e->getMessage()); exit; }
这将读取$ xml变量的POST请求的主体,如果有,则打印错误。
答案 1 :(得分:0)
你的意思是JSP将POST请求中的WSDL发送到PHP脚本吗? 如果是这样,请查看$ _POST数组。如果您确切地指定JSP如何发送它,我可能会帮助您更多。
无论如何,一旦你在PHP脚本的变量中有了WSDL url,就可以使用SoapClient类。
答案 2 :(得分:0)
假设最佳方案:
$soapClient = new SoapClient($wsdlUrl, $soapOptions);
$soapClient->callYourMethod();
但是在使用SOAP时你可能会遇到很多砖墙。这是documentation for SoapClient。
修改强>
因此,WSDL是POST。然后,如果XML字符串作为HTTP主体发送,则可以使用$HTTP_RAW_POST_DATA
访问它,如果XML字符串作为多部分请求的一部分发送,则可以使用$_FILES
超全局访问它。 / p>
这样的事情:
$wsdl = $HTTP_RAW_POST_DATA;
$wsdlUrl = 'data:text/xml;base64,' . base64_encode($wsdl);
$soapClient = new SoapClient($wsdlUrl);
无论如何,$HTTP_RAW_POST_DATA
仅在php.ini设置always_populate_raw_post_data
开启时可用。此外,如果请求是多部分,则会忽略此设置,但未填充$HTTP_RAW_POST_DATA
,但您可以使用$_FILES
访问已发布的部分。实际上,您可以使用php://input
代替$HTTP_RAW_POST_DATA
。
此外,data URIs只能在php.ini中启用allow_url_fopen
时使用。