PHP Soap over Proxies

时间:2012-11-07 12:27:22

标签: php soap proxy wsdl

我已经在这里提出了一个与此主题相关的问题,但没有任何帮助。现在我对SOAP有了更多了解,可以提供更多信息,我希望你们中的某个人可能知道为什么它不起作用。

  1. 我正在尝试在PHP中设置一个SoapClient来访问外部Web服务。
  2. 这个SoapClient需要在我当地的大学后面代理。
  3. extern WSDL文件通过IP-Check保护。
  4. 这就是我所知道的:

    $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不匹配。

    我该怎样做才能最终实现这个目标?

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

陈旧但想到我在这里与其他人分享。我也遇到了这个问题。似乎有一个错误,据说在PHP 5.0中修复了?在没有代理的情况下尝试解析WSDL文件,但soap调用会通过代理进行解析。见这里:https://bugs.php.net/bug.php?id=29211 - 我觉得这很烦人。