对于某些版本的php,SoapClient不会发送http用户代理信息。与本地WAMP相比,服务器上有哪些php版本?
尝试使用上下文流来显式设置用户代理,如下所示:
try { $opts = array( 'http' => array( 'user_agent' => 'PHPSoapClient' ) ); $context = stream_context_create($opts); $wsdlUrl = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'; $soapClientOptions = array( 'stream_context' => $context, 'cache_wsdl' => WSDL_CACHE_NONE ); $client = new SoapClient($wsdlUrl, $soapClientOptions); $checkVatParameters = array( 'countryCode' => 'DK', 'vatNumber' => '47458714' ); $result = $client->checkVat($checkVatParameters); print_r($result);}catch(Exception $e) { echo $e->getMessage();}编辑
实际上,您使用的Web服务似乎存在一些问题。IPv6上的HTTP和缺少的HTTP用户代理字符串的组合似乎给Web服务带来了问题。
要验证这一点,请在Linux主机上尝试以下操作:
curl -A '' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
此IPv6请求失败。
curl -A 'cURL User Agent' -6 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
此IPv6请求成功。
curl -A '' -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdlcurl -A 'cURL User Agent' -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
这两个IPv4请求均成功。
有趣的情况:)我想您的Linux主机会将ec.europa.eu解析为其IPv6地址,并且您的SoapClient版本默认未添加用户代理字符串。



