使用soapClient连接到https

问题描述 投票:0回答:2

过去几天我一直在试图找出为什么我的肥皂客户端无法连接,非常感谢任何帮助。非常简单的问题,我的肥皂客户;

$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。我真的不明白问题出在哪里。

php soap debian
2个回答
2
投票

经过几天的努力解决这个问题,我解决了这个问题。这里的一些答案是正确的,自签名证书存在问题(因此必须让 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 并不重要。现在确实这样了,我也不知道为什么。无论如何,我成功了。感谢所有提供反馈的人,我希望这对其他人有帮助。


0
投票

对我来说,缺失的部分也是

'location'=>"https://myLocation..."
尽管 WSDL 定义是使用 HTTPS 正确下载的,但 getFunction 请求还是通过纯 HTTP 发送到 url。因此,在添加
location
参数和特别提到的 https 后,它开始工作。

© www.soinside.com 2019 - 2024. All rights reserved.