[英]php soap_client and socks proxy?
一直试图使用通过ssh -D本地创建的SOCKS代理来通过跳转服务器代理肥皂调用。
我的Web服务器无法直接访问我尝试使用的设备,因此我认为我可以使用SSH代理。
我可以从Linux服务器上的Web浏览器访问wsdl,但是curl失败。
我已经使用TCP Dump验证了流量正在流出网络接口,并且在尝试使用代码时没有遇到代理的环回。 如果我使用Web浏览器,它将像预期的那样通过环回代理。
<?
require_once 'SOAP/Client.php';
$username = "testuser";
$password = "testpass";
$hostname='10.200.96.86';
$soapoptions = array('namespace' => 'urn:iControl');
$wsdl_url ="https://$hostname/iControl/iControlPortal.cgi?WSDL=LocalLB.Pool";
$proxy_parms = array( 'user' => $username, 'pass' => $password);
$params = array();
$client = new SOAP_Client($wsdl_url, true, '', $proxy_parms );
$client->setOpt('curl', CURLOPT_VERBOSE, true)
$client->setOpt('curl', CURLOPT_SSL_VERIFYPEER, 0);
$client->setOpt('curl', CURLOPT_SSL_VERIFYHOST, 0);
$client->setopt('curl', CURLOPT_PROXYTYPE, "CURLPROXY_SOCKS5");
$client->setopt('curl', CURLOPT_PROXY, "localhost:1080"); // 1080 is your -D parameter
$response = $client->call('get_list', $params, $soapoptions);
if (PEAR::isError($response)) {
print "an error occurred in the call " . $response;
}
?>
之后,我还以为是固定描述的问题在这里我必须说,这仅适用于“非WSDL”模式。
WSDL over Socks有两种可能性。
使用curl(带有SOCKS5选项)自行加载WSDL,并使用上述博客文章中的ProxySoapClient类。 并使用以下命令初始化客户端: new ProxySoapClient($wsdlContentFromCurl, $options);
但是,可能是您的WSDL具有更多的依赖关系,之后才尝试获取。 这是行不通的。 所以这是第二种方法:
使用ssh,polipo和proxy选项。
启动ssh ssh -C2qTnN -D 8081 user@domain
将在端口ssh -C2qTnN -D 8081 user@domain
创建一个SOCKS5代理。启动polipo polipo socksParentProxy=localhost:8081
这将在端口8123上创建一个WEB代理到端口polipo socksParentProxy=localhost:8081
上的SOCKS5代理。 polipo由inet.d启动,因此您可以在运行本地命令之前停止此操作)
现在在PHP中使用:
$client = new SoapClient(
$theUrlToWSDL,
[
'proxy_host' => 'localhost',
'proxy_port' => 8123,
]
);
之后,我还以为定影这里所描述的问题http://www.livingwithphp.com/php-soap-client-socks-proxy/我必须说,这仅适用于“非WSDL”模式。
WSDL over Socks有两种可能性。
1.)使用curl(带有SOCKS5选项)自行加载WSDL,并使用上述博客文章中的ProxySoapClient类。 并使用以下命令初始化客户端:new ProxySoapClient($ wsdlContentFromCurl,$ options);
但是,可能是您的WSDL具有更多的依赖关系,之后才尝试获取。 这是行不通的。 所以这是第二种方法:
2.)使用ssh, polipo和proxy选项。
启动ssh ssh -C2qTnN -D 8081 user@domain
将在端口ssh -C2qTnN -D 8081 user@domain
创建一个SOCKS5代理。启动polipo polipo socksParentProxy=localhost:8081
这将在端口8123上创建一个WEB代理到端口polipo socksParentProxy=localhost:8081
上的SOCKS5代理。 polipo由inet.d启动,因此您可以在运行本地命令之前停止此操作)
现在在PHP中使用
$client = new SoapClient(
$theUrlToWSDL,
[
'proxy_host' => 'localhost',
'proxy_port' => 8123,
]
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.