- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
使用此代码我发出 soap 请求
$client = new SoapClient('http://example.com/soap/wsdl');
try {
$result = $client->myMethod();
} catch (Exception $e) {
echo $e->getMessage();
}
有时(十分之一)会引发异常:
SoapFault exception: [HTTP] Could not connect to host
我的尝试
1) 我寻找解决方案,然后 I read这个问题可能是由 wsdl 缓存引起的,我在 php.ini
中禁用了它:
soap.wsdl_cache_enabled = 0
soap.wsdl_cache_ttl = 0
引发更少的异常
2) 我试图在 windows/system32/drivers/etc/hosts
中添加到 windows 主机(它们在 windows 上)的 dns 分辨率:
160.XX.XXX.XX example.com
引发更少的异常
3) 我还尝试禁用“Windows 防火墙”,
引发更少的异常
4) 我还尝试增加 php.ini 中的 default_socket_timeout
default_socket_timeout = 90
一切都没有改变
问题
服务器 soap 似乎没有问题。它也可以从其他站点使用,没有问题。还有什么我可以做的吗?
我的设置
PHP 5.6
Apache 2.4
Windows Server 2012
更新
经过多次测试,我认为问题出在网络上,soap服务器在反向代理后面,问题出现在代理上。
最佳答案
我只是想在此基础上再添加一个可能有用的提示。除了已经写在此处的其他有用答案之外,您还应该检查一下。
如果您从 php 5.5 或更早版本升级到 PHP 5.6 或 PHP7+,您可能会看到此错误。较新版本的 PHP 中 soap 的默认设置是验证远程对等点(应该如此)。如果您从 HTTPS 中提取 WSDL 或具有 HTTPS 端点,那么它将检查 CA。如果失败,您将收到此特定错误。
有两种方法可以解决这个问题。
1) 最安全的选择是验证对等点。在 ubuntu 系统上,您可以将证书复制到 /usr/local/share/ca-certificates/
并以 root 身份运行 update-ca-certificates
。
2) 或者您可以在此处禁用验证,这是一个如何执行此操作的示例。 - 这通常不是首选选项,但如果问题很紧急,它可以提供快速修复。不过请不要马虎对待您的安全。
$soapClient = new SoapClient($wsdl_url, array(
//'trace' => 1,
'stream_context' => stream_context_create(array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true //can fiddle with this one.
)
))
));
我发现有关 SOAP 的 PHP 文档有点零散。尤其是 SOAP WSSE。
关于PHP SoapClient : SoapFault exception Could not connect to host,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30410658/
以下所有内容都在 Amazon EC2 中运行 几个月来我一直在使用 ExactTarget 的 API 发送电子邮件,但它在我的 QA 环境中停止工作了。以下所有代码在我的生产环境中都能正常工作。他
我需要将 PHP 的 SoapClient 与 myfile-ca.crt 一起使用。我如何告诉 SoapClient 构造函数使用客户端证书(crt 文件)? 我熟悉 php SoapClient,
我以这种方式向 WSDL 服务器发送请求: $soap = new SoapClient('WSDL_URI'); $soap->SomeFunction(array('Param1' => 123,
我正在使用带有 WSDL 的 PHP Soap 客户端来发送 SOAP 请求。 这就是我初始化 SoapClient 的方式: $options = [ "trace" => 1,
我正在拔头发。我尝试了很多不同的方法,但没有任何效果: 'localhost', 'proxy_port' => '8888' )); try { $test = new stdCl
这个问题在这里已经有了答案: Does this SOAP Fault mean what I think it means? (3 个答案) 关闭 8 年前。 除了这条错误信息,这里没什么可写的了
我正在尝试从运行该服务的同一台服务器上调用 Soap 客户端以进行测试。我的 WSDL 在:http://www.installittoday.com/api/server.php?wsdl我正在尝试
这个问题在这里已经有了答案: Does this SOAP Fault mean what I think it means? (3 个答案) 关闭 8 年前。 除了这条错误信息,这里没什么可写的了
我正在尝试从运行该服务的同一台服务器上调用 Soap 客户端以进行测试。我的 WSDL 在:http://www.installittoday.com/api/server.php?wsdl我正在尝试
我们需要连接的其中一个 WS 有 PHP 示例代码。他们为我们签署了 CSR ...所以我们现在有用于身份验证的私钥和证书。 他们建议将私钥和签名证书放入一个 .pem 文件,并在 PHP 中使用如下
我在 PhP 中有一个工作的soaprequest,我正在尝试创建一个需要相同调用的java程序,但是我真的很难找到在java中创建以下php代码的方法,我找到了许多网站解释java中的soap请求,
我创建新的 SoapClient $this->soap = new \SoapClient($this->wdls // WDLS with corect host , [ 'excepti
我有一个 Web 服务函数,它向 PHP 客户端返回一组项目。根据项目的数量,PHP 返回类型不同。如果函数返回一项,则 PHP 类型为 stdClass 如果函数返回多项,则 PHP 类型为 arr
我有一个 WSDL,它有一个需要属性的元素: Claim Element 就生成的 xml 而言,它应该如下所示:
我正在使用 SOAP 集成支付网关。当我使用 Wamp 调用服务功能时,它运行良好。但是在我的实时服务器上它给出了以下错误 - Class 'SoapClient' not found 我使用的代码是
我找到了许多关于 SoapClient 希望您如何在请求中设置属性的解释,但我就是找不到从响应中读取属性的方法。 例如,我的 SoapClient 响应中包含以下元素: ... JOWtest
当我发送以下请求时,出现“版本错误”异常。 上面的请求被转换成zend代码 $client = new zend_soap_client(null,
我是 web 服务的新手,我正在尝试使用 soapClient() 调用 web 服务,它生成的请求 XML 不是预期的格式 下面是请求XML的预期格式 MD
另一个 SOAP 问题 - 我有一个大的多维数组,当使用 print_r 时回显很好(例如,您可以看到所有数据)。当我使用 时出现问题 SOAPClient->__soapCall('Function
我最近从 PHP5.4 升级到 PHP7。天哪,这是一个变化,但这不是重点。 升级后我遇到了 SoapService 的问题。 这是我的 SoapRequest 在 PHP5.4 上的样子:
我是一名优秀的程序员,十分优秀!