使用soapClient

时间:2015-05-13 19:17:42

标签: php soap debian

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

$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时,错误保持不变。所以,它必须在握手期间发生。我可以从soap客户端服务器访问远程服务器没有问题,并且能够登录。

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

1 个答案:

答案 0 :(得分: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并不重要。现在它确实如此,我不知道为什么。无论如何,我得到了它的工作。感谢所有提供反馈的人,我希望这有助于其他人。