使用 soapClient 连接到 https
Connecting to https with soapClient
过去几天我一直在试图弄清楚为什么我的 soap 客户端无法连接,感谢任何帮助。非常简单的问题,我的 soap 客户;
$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 捕获了几次重新传输。此外,当我故意将用户名和密码更改为错误时,错误保持不变。所以,它一定是在握手期间发生的。我可以毫无问题地从 soap 客户端服务器访问远程服务器,并且能够登录。
错误似乎表明它正在尝试通过 HTTP 进行连接,但我的 URL 特别要求使用 HTTPS。我真的不明白问题出在哪里。
经过几天的努力,我解决了这个问题。这里的一些答案是正确的,自签名证书有问题(因此必须让 Soap 客户端不关心),但另一个问题是 url 本身。无论出于何种原因,输入 IP 地址都不起作用,但使用 FQDN 就可以了。因此,完整的代码如下所示;
<?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'>";
?>
这个问题特别令人烦恼,因为我使用的是来自另一台服务器的可靠代码,而自签名证书和 FQDN 并不重要。现在它做到了,我不知道为什么。无论如何,我让它工作了。感谢所有提供反馈的人,希望这对其他人有帮助。
过去几天我一直在试图弄清楚为什么我的 soap 客户端无法连接,感谢任何帮助。非常简单的问题,我的 soap 客户;
$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 捕获了几次重新传输。此外,当我故意将用户名和密码更改为错误时,错误保持不变。所以,它一定是在握手期间发生的。我可以毫无问题地从 soap 客户端服务器访问远程服务器,并且能够登录。
错误似乎表明它正在尝试通过 HTTP 进行连接,但我的 URL 特别要求使用 HTTPS。我真的不明白问题出在哪里。
经过几天的努力,我解决了这个问题。这里的一些答案是正确的,自签名证书有问题(因此必须让 Soap 客户端不关心),但另一个问题是 url 本身。无论出于何种原因,输入 IP 地址都不起作用,但使用 FQDN 就可以了。因此,完整的代码如下所示;
<?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'>";
?>
这个问题特别令人烦恼,因为我使用的是来自另一台服务器的可靠代码,而自签名证书和 FQDN 并不重要。现在它做到了,我不知道为什么。无论如何,我让它工作了。感谢所有提供反馈的人,希望这对其他人有帮助。