2015-05-13 43 views
2

我花了最近几天试图找出为什么我的soap客户端无法连接,任何帮助表示赞赏。非常简单的问题,我的肥皂客户;用soapClient连接到https

$soapClient = new SoapClient("AXLAPI.wsdl", array('trace'=>true, 'exceptions'=>true,'location'=>"https://ip_address:8443/axl", 
'login' => "username",'password'=> "password")); 

产生这个非常常见的错误;

Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in /var/www/html/axl_test.php:18 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'https://ip_address...', 'CUCM:DB ver=8.5...', 1, 0) #1 /var/www/html/axl_test.php(18): SoapClient->__call('getLine', Array) #2 /var/www/html/axl_test.php(18): SoapClient->getLine(Array) #3 {main} thrown in /var/www/html/axl_test.php on line 18 

我在另一台服务器上运行完全相同的代码,它运行良好。我认为这与SSL问题有关,因为wireshark会捕获多次重传。另外,当我有意将用户名和密码更改为false时,错误保持不变。所以,在握手期间一定会发生。我可以从肥皂客户端服务器访问远程服务器,没有问题,并且可以登录。

错误似乎表明它尝试通过HTTP进行连接,但我的URL特别要求使用HTTPS。我真的不明白问题出在哪里。

+1

这不是SOAP错误; *“无法连接到主机”*表示TCP连接无法建立。使用某物。像'curl https:// ip_address:8443/...'来检查你是否可以建立到该端口的连接。由于它是一个非标准的端口,因此可能会被网络中的某种防火墙阻止。 – helmbert

+1

你在代理服务器或防火墙后面吗? –

+0

我根本不在任何防火墙之后。 – Kimomaru

回答

0

经过几天的工作,我解决了这个问题。这里的一些答案是正确的,自签名证书存在问题(所以Soap客户端必须不关心),但另一个问题是URL本身。无论出于何种原因,使用FQDN都无法使用IP地址。所以,完整的代码看起来像这样;

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', True); 
?> 

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<link rel="stylesheet" type="text/css" href="style1.css"> 
<title>AXL Test</title> 

<?php 

$context = stream_context_create(array('ssl' => array('verify_peer' => false, 'allow_self_signed' => true))); 

$soapClient = new SoapClient("AXLAPI.wsdl", array('stream_context' => $context, 'trace'=>true, 'exceptions'=>true,'location'=>"https://hostname.domain.name:8443/axl",'login' => "username",'password'=> "password")); 
$response = $soapClient->getLine(array("routePartitionName"=>"partitionName", "pattern"=>"pattern")); 
echo "<TR><TD class='body'>" . $response->return->line->description . "</TD><TD class='body'>"; 

?> 

这个问题是特别棘手的,因为我用的是尝试和真正的代码从另一台服务器,其中自签署ceritificats和FQDN并不重要。现在它确实发生了,我不知道为什么。无论如何,我都能工作。感谢所有提供反馈的人,我希望这可以帮助其他人。