2012-11-07 2 views
0

나는이 주제와 관련된 질문을 이미 물었지만 실제로 도움이되지는 못했다. 이제 SOAP에 대해 조금 더 알고 더 자세한 정보를 제공 할 수 있습니다. 여러분의 누군가가 왜 제대로 작동하지 않는지에 대한 좋은 아이디어가 있기를 바랍니다.Proxys를 통한 PHP 비누

  1. extern Web Service에 액세스하기 위해 PHP에서 SoapClient를 약간 설정하려고합니다.
  2. 이 SoapClient는 지역 대학에서 프록시를 사용해야합니다.
  3. extern WSDL 파일은 IP-Check를 통해 보호됩니다.

이은 내가 아는 것입니다 :

$ExternWSDLFile = "http://search.webofknowledge.com/esti/wokmws/ws/WOKMWSAuthenticate?wsdl"; 
$LocalUniversityProxy = "proxy.krz.uni-heidelberg.de:8080"; 

난 항상 사용자/암호를 통해 WSDL에 액세스하려고하고 나는 그들이 나에게 말했다 오랜 시간 동안 작동하지 않았다 후, 그 사용자/암호입니다 필요하지 않으며 WSDL 인증은 IP-Check를 통해서만 수행됩니다. 그래서 나는 전에 생각하고 시도한 것처럼 더 이상 SoapClient에게 사용자/암호 조합을 제공 할 필요가 없습니다. 외부 (extern) 개인 PC에서 같은 코드의 실행은, 적어도 어떤 오류를 포기하지 반면,

$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); 

여전히 작동하지 않았다

내가 등록 된 IP-ADRESS와 대학의 컴퓨터에서 먼저 시도 무엇인가 메시지이지만 완전히 초기화 된 Soap-Object. 이 코드는 University-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 

따라서 University-Proxy 때문에이 오류가 발생했습니다.

다음은 WSDL 파일을 로컬에서 가져 오려고했는데, 그 이유는 Google에서 종종 힌트를 얻었 기 때문입니다.

$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

나이가 들었지만 이드는 다른 사람들과 공유했습니다. 나도이 문제에 직면 해있다. PHP 5.0에서 버그가 수정 된 것 같습니다. 여기서 WSDL 파일은 프록시없이 구문 분석하려고 시도하지만 비누 호출은 프록시를 통과합니다. 여기를 참조하십시오 : https://bugs.php.net/bug.php?id=29211 -이게 아주 성가신 것 같습니다.