我已经在这里提出了一个与此主题相关的问题,但没有任何帮助。现在我对SOAP有了更多了解,可以提供更多信息,我希望你们中的某个人可能知道为什么它不起作用。
这就是我所知道的:
$ExternWSDLFile = "http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl";
$LocalUniversityProxy = "proxy.krz.uni-heidelberg.de:8080";
我总是尝试通过用户/密码访问WSDL并且我很长时间没有工作他们告诉我,用户/密码不是必需的,WSDL认证只能通过IP-Check完成。所以我不必像以前想过的那样给SoapClient任何用户/密码组合。
这是我首先从大学计算机上注册的IP-Adress:
$wsdl = "http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl";
$Client = new SoapClient($wsdl,array('trace' => 1, 'exception' => 0, 'cache_wsdl' => 0));
$Authentification = $Client->authenticate();
var_dump($Client);
var_dump($Authentification);
仍然没有工作,而相同的代码从外部私人PC运行,至少没有错误消息,但完全初始化的Soap-Object。大学PC上的此代码仅生成错误消息:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl' : failed to load external entity "http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl" in E:\xampp\htdocs\test.php:17 Stack trace: #0 E:\xampp\htdocs\test.php(17): SoapClient->SoapClient('http://search.w...', Array) #1 {main} thrown in E:\xampp\htdocs\test.php on line 17
所以这个因为大学代理而明确地破裂了!
接下来我尝试在本地获取WSDL文件,因为这通常是我从谷歌提示。
$auth = base64_encode('KHD\user:pass');
$header = array("Authorization: Basic $auth");
$Proxy = 'proxy.krz.uni-heidelberg.de:8080';
$Context = stream_context_create(array('http' => array('proxy' => $Proxy,'request_fulluri' => True,'header' => $header,),));
$wsdl = file_get_contents("http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl",false,$Context);
在$ wsdl上使用print_r()为我提供了正确的本地缓存WSDL文件。但是现在用$ wsdl设置SoapClient它再次打破了消息:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from '<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions name="WOKMWSAuthenticateService" targetNamespace="http://auth.cxf.wokmws.thomsonreuters.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://auth.cxf.wokmws.thomsonreuters.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:types> <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://auth.cxf.wokmws.thomsonreuters.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://auth.cxf.wokmws.thomsonreuters.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xs:element name="authenticate" type="tns:authenticate" /> <xs:element name="authenticateResponse" type="tns:authenticateResponse" /> <xs:element name="closeSession" type="tns:closeSession" /> <xs:ele in E:\xampp\htdocs\test.php on line 12
我完全不知道为什么这不起作用。我完全按照手册试了很多东西。代理一直在破坏我的工作,在私有/外部PC上这个脚本不可用,因为IP不匹配。
我该怎样做才能最终实现这个目标?
感谢您的帮助!
答案 0 :(得分:0)
陈旧但想到我在这里与其他人分享。我也遇到了这个问题。似乎有一个错误,据说在PHP 5.0中修复了?在没有代理的情况下尝试解析WSDL文件,但soap调用会通过代理进行解析。见这里:https://bugs.php.net/bug.php?id=29211 - 我觉得这很烦人。