我使用PHP 5.2.10对使用SOAP 1.2的Web服务进行简单的脚本连接调用。
相同的PHP安装能够通过Web服务连接到另一个使用SOAP 1.1的Web服务器而不会出现问题。此外,使用1.2的Web服务与使用几乎相同的硬代码的另外两台服务器正常工作。
但是,每次我在PHP 5.2.10的服务器上使用SOAP 1.2时,如果我从批处理文件运行脚本,我会收到以下错误:
Warning: SoapClient::SoapClient(http://www.w3.org/2005/05/xmlmime): failed to open stream: HTTP request failed! HTTP/1.1 401 Authorization Required in C: \NewSimpleConnectionTest.php on line 10
如果脚本是在另一台计算机上通过Eclipse PHP和PHP 5.2运行的,那么它没有任何错误,因此硬编码似乎很好,用户和密码也是正确的,因为它在其他服务器和Eclipse上使用测试:
我的脚本是这样的:
<?php
$_endpoint = "http://server:8080/serverv/ServerAPI";
$_username = "userServer";
$_password = "123ABC!";
try
{
$client = new SoapClient($_endpoint."?WSDL", array('location' => $_endpoint, 'login' => $_username, 'password' => $_password, 'trace' => 1, 'features' => SOAP_USE_XSI_ARRAY_TYPE + SOAP_SINGLE_ELEMENT_ARRAYS, 'soap_version' => SOAP_1_2));
echo 'Connected to Web Services.';
}catch(Exception $e){
echo 'Failure to connect to WebServices.';
}
?>
这是SOAP和XML phpinfo中的信息。
SimpleXML
Simplexml support => enabled
Revision => $Revision: 1.151.2.22.2.46 $
Schema support => enabled
soap
Soap Client => enabled
Soap Server => enabled
Directive => Local Value => Master Value
soap.wsdl_cache => 1 => 1
soap.wsdl_cache_dir => /tmp => /tmp
soap.wsdl_cache_enabled => 1 => 1
soap.wsdl_cache_limit => 5 => 5
soap.wsdl_cache_ttl => 86400 => 86400
是否有关于此PHP版本中缺少的内容或问题与该服务器中的SOAP 1.2一起工作的想法?
提前致谢!!
答案 0 :(得分:1)
在解决此问题几个小时后,解决方案是将PHP的版本从5.2.10更改为5.5.28。
此旧版本存在某种错误,并阻止与SOAP 1.2的正确连接。
我希望这有助于使用这个旧版PHP的人。