我正在使用soap客户端连接到wsdl服务。肥皂客户端使用自定义身份验证模式,我将它们添加到http通过以下代码PHP soapclient使用代理与身份验证和自定义http标头
$client=new SoapClient(
$wsdl,
array(
'trace' => 1,
"stream_context" => stream_context_create(
array(
"http"=>array(
"header"=> "username: xmluatbank\r\n".
"password: 123456\r\n"
)
)
)
);
并且标头如下所示。
POST /myweb/Proxy HTTP/1.1
Host: uat.myweb.com:8080
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.4.19
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 1086
username: xmluatbank
password: 123456
到目前为止,直到这里一切都很好,然后来到新的请求需要通过代理服务器连接,所以我改变了代码follwing:
$client=new SoapClient(
$wsdl,
array(
'trace' => 1,
"stream_context" => stream_context_create(
array(
"http"=>array(
"header"=> "username: xmluatbank\r\n".
"password: 123456\r\n"
)
),
'proxy_host' => $proxy,
'proxy_port' => $proxyport,
'proxy_login' => $proxyusrname,
'proxy_password' => $proxypwd,
)
);
和标题变成这个样子:
POST http://uat.myweb.com:8080/ctos/Proxy HTTP/1.1
Host: uat.myweb.com:8080
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.3.9-ZS5.6.0
Content-Type: text/xml; charset=utf-8
SOAPAction: ""
Content-Length: 1086
Proxy-Authorization: Basic YWdyb2JhbmtcanVyaXMudnRjbDpBYmNkMTIx==
因为您可以看到我现在拥有的流上下文已经消失,所以现在我得到了wsdl服务器的认证错误。看起来像代理覆盖HTTP标头。所以我试图代理添加到HTTP头,而不是使用SOAP代理
$sLogin = base64_encode("$proxyusername:$proxypwd");
$aHTTP['http']['proxy'] = "$proxy:$proxyprot";
$aHTTP['http']['method'] = 'POST';
$aHTTP['http']['header'] = "User-Agent: My PHP Script\r\n";
$aHTTP['http']['header'] .= "Proxy-Authorization: Basic $sLogin";
$aHTTP['http']['header'] .= "username: xmluatbank\r\n"."password: 1234567\r\n";
$context = stream_context_create($aHTTP);
并称为SOAP客户端这样的:
$client=new SoapClient(
$wsdl,
array(
'trace' => 1,
"stream_context" => $context
)
);
但这样一来我得到肥皂错误,无法连接到代理。
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://uat.myweb.com:8080/ctos/Proxy?wsdl' : failed to load external entity "http://uat.myweb.com:8080/myweb/Proxy?wsdl"
我不知道如何解决这个问题。我尝试了所有我知道,请大家帮忙
什么是对旧版本的PHP '$ proxy'的价值?使用卷曲或类似方法时,你能获得wsdl吗?示例'curl -X POST --proxy'http:// proxyuser:proxypass @ proxyaddr:proxyport'-H'用户名:xmluatbank'-H'密码:123456''http://uat.myweb.com:8080/myweb/Proxy?wsdl'' – piotrekkr 2014-09-25 10:43:34
不幸的是,银行正在使用Windows服务器 – 2014-09-25 12:21:19
您可以像这里描述的那样使用vbscript/powershell http://stackoverflow.com/questions/2710748/run-curl-commands-from-windows-console – piotrekkr 2014-09-25 12:57:31