通过PHP SoapClient连接到UPS API时获取HTTP标头时出错

时间:2017-12-08 19:55:52

标签: php wsdl http-headers ups

大约1。5年前,我已经与UPS(联合包裹服务公司)编写了一个集成,用于生成运输标签。我已经在1月份停止使用UPS,现在又回到了这种集成状态。

最近,我一直看到" 错误提取http标题"几乎所有我对UPS API提出的要求。他们的生产服务器通常会每隔一个请求返回此错误(但是当它发生时,它会连续执行2-3次),并且他们的开发服务器会不断地返回此错误。我的请求间隔合理(相隔至少10秒)。

该应用程序使用 PHP(v5.3.28)编写,并使用 SoapClient 与UPS' WSDL表单。

根据具有类似问题的其他人的经验,看起来它与UPS有关,不希望保持连接活着,而我的服务器由于某种原因持续存在。

到目前为止,我已尝试过:

  • 增加default_socket_timeout和max_execution_time
  • 将keep_alive = 0和高值connection_timeout传递给SoapClient的构造函数
  • 在SoapClient周围编写一个包装器,以便在__call()和__soapCall()之后立即销毁连接
  • 关闭IIS中的HTTP Keep-Alive'常见的标题(请不要判断)

我已经没有关于如何解决这个问题的想法,甚至在哪里继续诊断它。似乎SO上的大多数人都能够通过增加socket_timeout来解决他们的问题,但这对我没有帮助。

任何指针都表示赞赏。

//编辑

我已经弄明白了。我能够与管理员讨论升级到PHP 5.6并使用这段代码,我能够解决问题:

$client = new SoapClient("wsdl_goes_here", array(
            'keep_alive' => 0,
            'soap_version' => SOAP_1_1,
            'trace' => 1,
            'stream_context' => stream_context_create(array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false
                )
            ))
        ));

0 个答案:

没有答案