第一次请求后,SOAP客户端抛出“获取http标头时出错”

时间:2015-01-21 13:59:21

标签: php soap soap-client

我需要熟悉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查找需要这么多时间?)

1 个答案:

答案 0 :(得分:0)

事实证明,整个服务器的连接相当不稳定 我(以及我要求的其他一些人)在尝试在浏览器中打开WSDL file时遇到了类似的问题 - 它第一次运行,但刷新会以某种方式中断连接10秒钟。

虽然我真的不能说它的问题是什么,但这确实表明错误在于服务器,而不是我的客户。