我必须调用需要基本身份验证的Soap WebService。我尝试了带有基本身份验证的SoapUI及其工作方式。可以从浏览器正确加载WSDL页面。没有SSL相关问题。
我正在尝试使用SoapClient进行相同的调用,但无法正常工作。据我了解(在Burp Software的帮助下),身份验证标头不是通过soapClient发送的。
当我遇到这个问题时,我检查了StackOverflow上几乎所有相关的问题,并尝试了他们提出的所有建议。
这是我正在处理的PHP代码:
echo "<pre>";
$WSDL_URL='https://myserver.com/services/?wsdl';
$username='xxx';
$password='yyy';
$params = array(
'login' => $username,
'password' => $password,
'trace' => 0,
'exceptions' => 0,
'location' => $WSDL_URL,
'uri' => $WSDL_URL
);
$soap = new SoapClient(null, $params);
$RESULT = $soap->serviceTest( 'HELLO' );
echo "<h1>ServiceTEST Result:</h1>";
print_r($RESULT);
这是我的错误:
SoapFault Object
(
[message:protected] => Client Error
[string:Exception:private] =>
[code:protected] => 0
[file:protected] => /Applications/MAMP/htdocs/soap/test.php
[line:protected] => 24
[trace:Exception:private] => Array
(
[0] => Array
(
[file] => /Applications/MAMP/htdocs/soap/test.php
[line] => 24
[function] => __call
[class] => SoapClient
[type] => ->
[args] => Array
(
[0] => serviceTest
[1] => Array
(
[0] => HELLO
)
)
)
)
[previous:Exception:private] =>
[faultstring] => Client Error
[faultcode] => s:Client
)
我设法在wsdl请求中不包含登录名/密码的情况下获得了服务列表,因此,soapclient正在与此服务器一起使用。
使用登录名和密码时出现500错误,因此在服务器端似乎是一个问题。
这是可以帮助您获得有关肥皂响应的更多详细信息的代码
<?php
$username='xxx';
$password='yyy';
$WSDL_URL='https://myserver.com/services/?wsdl';
$params = array(
// witout params it works at least for the wsdl
//'login' => $username,
//'password' => $password
);
try {
$soap = new SoapClient( $WSDL_URL, $params);
$RESULT = $soap->__getFunctions();
print_r($RESULT);
// uncomment that and you'll have the error
//$soap->serviceTest('bob');
}
catch (SoapFault $fault) {
echo "SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})";
}
catch (Exception $e) {
echo $e->getMessage();
echo $e->getTraceAsString();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句