Web Services 有没有办法强制PHP SOAP调用HTTPS而不是HTTP?

3mpgtkmj  于 2022-11-15  发布在  PHP
关注(0)|答案(1)|浏览(189)

我有一个非常简单的PHP代码:

<?php

$soap = new SoapClient('https://rev-int.api.us.fleetmatics.com/Vehicle/SageQuest/VehicleService.svc?wsdl', array());

var_dump($soap);

当我将该URL复制到浏览器中时,它加载得很好,没有重定向或任何内容:新的SOAP客户端rev-int.api.us.fleetmatics.com/Vehicle/SageQuest/VehicleService.svc?wsdl
但是当我执行PHP脚本时,在PHP超时后,我得到了以下错误:

Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://rev-int.api.us.fleetmatics.com/Vehicle/SageQuest/VehicleService.svc?wsdl=wsdl0' : failed to load external entity "http://rev-int.api.us.fleetmatics.com/Vehicle/SageQuest/VehicleService.svc?wsdl=wsdl0"

请注意,响应URL是http://rev-int.api.us.fleetmatics.com/Vehicle/SageQuest/VehicleService.svc?wsdl=wsdl0,它非常相似,但并不十分准确。

也就是说,每个URI都指向HTTP而不是HTTPS,但如果我们在浏览器中简单地更改这一点,页面加载就可以了。
所以问题就变成了:当我们创建PHP SoapClient时,是否可以强制所有URI都遵循HTTPS,而不管WSDL中指定的协议?

xdyibdwo

xdyibdwo1#

WSDL可以独立存在并包含内部的所有内容,或者它可以使用导入从其他位置引入内容(这通常发生在XSD架构中)。
如果它导入了东西,这些导入需要由客户端来解析。如果它们不能被解析,或者是因为位置错误,或者是协议错误,或者其他什么原因,那么客户端就会退出,因为它需要一个完整的WSDL来理解服务的契约以及如何调用它,而不仅仅是它可以加载的部分。
所以你有两个选择:
1.请与服务提供商联系,要求他们修复该问题,以便可以解决所有导入问题。
1.如果您可以下载WSDL和它尝试导入的所有资源,通过在浏览器中打开并将协议更改为https,您可以将它们全部保存在本地磁盘上的同一个文件夹中。然后可以更改WSDL,使用<wsdl:import .... location="VehicleService.xml" />导入本地文件,而不是现在这样做。然后可以将本地WSDL提供给客户机,因为现在所有内容都在同一个文件夹中,所以应该可以工作。

相关问题