我需要熟悉SOAP,并编写了一个连接到一些随机Web服务的简单客户端。 (事实证明,即使找到工作服务也有点麻烦。)
我到目前为止的代码似乎也有效 - 但事情就是这样:它每10秒只能运行一次。
当我第一次加载页面时,它会显示我期望的结果 - 一个对象的var_dump - 但是当我在那之后重新加载页面时,我看到的只是Error Fetching http headers
。现在重要的是我刷新了多少次,直到我再次获得正确的结果需要大约十秒钟,然后重复该过程 - 刷新太快,得到错误。
我无法看到在HTTP级别上发生了什么,即使可以,我也不确定我是否能够得出正确的结论。
/>
此处发布的similar questions的答案包括将keep_alive
选项设置为false
,或者扩展default_socket_timeout
,但这两种解决方案都不适合我。
所以,长话短说:这是服务结束时的问题,还是我可以解决的问题,如果是后者,怎么办?
这是我到目前为止的代码:
<?php
error_reporting(-1);
ini_set("display_errors", true);
ini_set("max_execution_time", 600);
ini_set('default_socket_timeout', 600);
$wsdl = "http://api.chartlyrics.com/apiv1.asmx?WSDL";
try
{
$client = new SoapClient($wsdl, array(
"keep_alive" => false,
"trace" => true
));
$response = $client->SearchLyricDirect(array(
"artist" => "beatles",
"song" => "norwegian wood"
));
var_dump($response);
}
catch (Exception $e)
{
echo $e->getMessage();
}
?>
任何帮助将不胜感激。 (作为奖励,如果你可以告诉我为什么在本地保存WSDL可以将这个过程提高30秒,这也很棒。我认为它的DNS查找需要这么多时间?)
答案 0 :(得分:0)
事实证明,整个服务器的连接相当不稳定 我(以及我要求的其他一些人)在尝试在浏览器中打开WSDL file时遇到了类似的问题 - 它第一次运行,但刷新会以某种方式中断连接10秒钟。
虽然我真的不能说它的问题是什么,但这确实表明错误在于服务器,而不是我的客户。