我正在尝试在远程主机上调用WS over https:远程端口,我得到:
获取http标头时出错
使用PHP5 SoapClient; 我可以通过这样做得到功能列表$client->__getFunctions()但是当我打电话时$client->myFunction(...)我总是得到这个错误.
我用Google搜索并发现在php.ini中增加了default_socket_timeout,但它没有用.
谁能建议我一个解决方案?
编辑:这是代码:
$wsdl="myWSDL";
$client = new SoapClient($wsdl,array('connection_timeout'=>5,'trace'=>true,'soap_version'=>SOAP_1_2));
var_dump($client->__getFunctions());
try {
$response=$client->myFunction("1","2","3");
} catch (SoapFault $fault) {
var_dump($fault);
}
}
Run Code Online (Sandbox Code Playgroud)
}
......总是有错.
cmb*_*ley 58
当default_socket_timeoutSOAP响应超过该值时,通常会出现此错误.(见此链接.)
来自SoapClient构造函数的注释:该connection_timeout选项用于定义连接到服务的超时值,而不是用于响应的超时.
您可以像这样增加它:
ini_set('default_socket_timeout', 600); // or whatever new value you want
Run Code Online (Sandbox Code Playgroud)
这应该告诉您超时是否是问题,或者您是否有其他问题.请记住,您不应该将此作为永久解决方案,而是在继续调查SOAP服务响应速度这么慢之前,先查看它是否消除了错误.如果服务一直很慢,则可能必须考虑脱机/批处理.
Man*_*chi 10
只是想在我的具体情况下分享这个问题的解决方案(我有相同的症状).在我的场景中,结果证明Web服务提供的ssl证书不再受信任.它实际上是由于客户端安装的新防火墙干扰了SOAP请求,但最终结果是证书未正确提供/信任.
跟踪有点困难,因为SoapClient调用(即使是trace = 1)也没有提供非常有用的反馈.
我能够通过使用以下方式证明不受信任的证书:
openssl s_client -connect <web service host>:<port>
Run Code Online (Sandbox Code Playgroud)
我知道这不是每个人的问题的答案,但希望它可以帮助某人.无论哪种方式,我认为重要的是要意识到这个错误的原因(faultcode:"HTTP"faultstring:"Error Fetching http headers")通常会成为网络/套接字/协议/通信问题而不是简单地"不允许请求的时间".我无法想象扩展default_socket_timeout值会经常解决这个问题,即使它确实如此,最好解决为什么它首先这么慢的问题.
小智 8
我想现在为时已晚,但我遇到了同样的问题.我尝试套接字超时,但它不起作用.我的问题是客户端和服务器在同一个物理服务器中.由于客户端代码在同一个物理服务器上工作,我得到了这个错误,但是,同一客户端代码移动到我的localhost,请求服务器,(客户端和服务器在两个不同的机器中执行)一切正常.
也许这可以帮助别人!
我遇到了同样的问题并尝试了上述所有解决方案。可悲的是没有任何效果。
我通过添加压缩标头属性解决了我的问题。当您期待gzip压缩格式的响应时,这实际上是必需的。
//set the Headers of Soap Client.
$client = new SoapClient($wsdlUrl, array(
'trace' => true,
'keep_alive' => true,
'connection_timeout' => 5000,
'cache_wsdl' => WSDL_CACHE_NONE,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | SOAP_COMPRESSION_DEFLATE,
));
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
祝你好运。
小智 5
对我有用的配置是在我的 php 脚本中定义以下参数:
ini_set('default_socket_timeout', 5000);
$client = new \SoapClient($url,array(
'trace' =>true,
'connection_timeout' => 5000,
'cache_wsdl' => WSDL_CACHE_NONE,
'keep_alive' => false,
));
Run Code Online (Sandbox Code Playgroud)
请给出意见。
根据我对这个问题的经验,最重要的参数定义是
ini_set('default_socket_timeout', '5000');
Run Code Online (Sandbox Code Playgroud)
在我的测试期间,我将 default_socket_timeout 定义为 5 秒,并且立即引发错误“获取 http 标头时出错”。
我希望它能帮助你!
小智 5
设置'keep_alive'为false对我有用:
new SoapClient($api_url, array('keep_alive' => false));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104225 次 |
| 最近记录: |