SOAPClient Error: Could not connect to host on PHP 7.0 and Laravel
SOAPClient Error: Could not connect to host on PHP 7.0 and Laravel
我在 PHP 7.0 服务器上的 Laravel 应用程序上通过 SOAPClient 连接到 WSDL 时遇到问题。我已经使用 PHP 5.6 在我的本地服务器上测试了以下代码并且它有效。两者都是运行Linux;我的本地服务器是 运行 Kubuntu,另一台服务器是 运行 CentOS 7.
var $client;
function __construct(){
ini_set('soap.wsdl_cache_enabled',WSDL_CACHE_NONE);
ini_set('soap.wsdl_cache_ttl', 0);
$this->client = new SoapClient(env('WSDL_SOLMAN02_TEST'),
['login'=>env('SOLMAN_US_TEST'),
'password'=>env('SOLMAN_PSSWD_TEST'),
'cache_wsdl' => WSDL_CACHE_NONE,
'soap_version' => SOAP_1_1,
'ssl_method' => 'SOAP_SSL_METHOD_SSLv3',
'trace' => true,
'exception' => false,
'stream_context'=> stream_context_create(array(
'ssl'=> array(
'verify_peer'=>false,
'verify_peer_name'=>false
)
))
]
);
}
public function updateTicket(Ticket $ticket){
$incident = $this->createTicketObject($ticket);
$params = get_object_vars($incident);
return $this->client->wsdlFunc($params);
}
有趣的是,当我打印 dd($this->client->__getFunctions());
时,WSDL 以一个包含您可以调用的所有函数的数组作为响应,但当我实际调用任何函数时,都会显示错误。
我几乎尝试了所有方法,从更改连接中的每个参数到更改 php.ini,但没有任何效果。我已将服务器降级到 PHP 5.6,但仍然无法正常工作。
我还在 SOAPUI 上测试了 WSDL,它有效。
我发现两种环境之间的唯一区别是 PHP 7.0 的服务器具有 https。
我的代码很好,我只需要将 WSDL IP 地址添加到 /etc/hosts。
我从 php v7.2 升级到 v7.3 (docker) 时遇到了同样的问题:
SOAPClient Error: Could not connect to host
我尝试了@suecamol 提出的解决方案,但没有用。看起来 php v7.3 改变了 ssl 安全性。
我的一位同事找到的解决方案是添加适当的 ssl 密码加密:
$arrContextOptions= [
'ssl' => [
'ciphers' => 'AES256-SHA',
]
];
$options = [
...
'stream_context' => stream_context_create($arrContextOptions),
];
$client = new SoapClient('some wsdl url', $options);
希望这可以帮助面临这个问题的人。
我在 PHP 7.0 服务器上的 Laravel 应用程序上通过 SOAPClient 连接到 WSDL 时遇到问题。我已经使用 PHP 5.6 在我的本地服务器上测试了以下代码并且它有效。两者都是运行Linux;我的本地服务器是 运行 Kubuntu,另一台服务器是 运行 CentOS 7.
var $client;
function __construct(){
ini_set('soap.wsdl_cache_enabled',WSDL_CACHE_NONE);
ini_set('soap.wsdl_cache_ttl', 0);
$this->client = new SoapClient(env('WSDL_SOLMAN02_TEST'),
['login'=>env('SOLMAN_US_TEST'),
'password'=>env('SOLMAN_PSSWD_TEST'),
'cache_wsdl' => WSDL_CACHE_NONE,
'soap_version' => SOAP_1_1,
'ssl_method' => 'SOAP_SSL_METHOD_SSLv3',
'trace' => true,
'exception' => false,
'stream_context'=> stream_context_create(array(
'ssl'=> array(
'verify_peer'=>false,
'verify_peer_name'=>false
)
))
]
);
}
public function updateTicket(Ticket $ticket){
$incident = $this->createTicketObject($ticket);
$params = get_object_vars($incident);
return $this->client->wsdlFunc($params);
}
有趣的是,当我打印 dd($this->client->__getFunctions());
时,WSDL 以一个包含您可以调用的所有函数的数组作为响应,但当我实际调用任何函数时,都会显示错误。
我几乎尝试了所有方法,从更改连接中的每个参数到更改 php.ini,但没有任何效果。我已将服务器降级到 PHP 5.6,但仍然无法正常工作。
我还在 SOAPUI 上测试了 WSDL,它有效。
我发现两种环境之间的唯一区别是 PHP 7.0 的服务器具有 https。
我的代码很好,我只需要将 WSDL IP 地址添加到 /etc/hosts。
我从 php v7.2 升级到 v7.3 (docker) 时遇到了同样的问题:
SOAPClient Error: Could not connect to host
我尝试了@suecamol 提出的解决方案,但没有用。看起来 php v7.3 改变了 ssl 安全性。
我的一位同事找到的解决方案是添加适当的 ssl 密码加密:
$arrContextOptions= [
'ssl' => [
'ciphers' => 'AES256-SHA',
]
];
$options = [
...
'stream_context' => stream_context_create($arrContextOptions),
];
$client = new SoapClient('some wsdl url', $options);
希望这可以帮助面临这个问题的人。