当前位置: 首页 > 面试题库 >

SOAP错误:解析WSDL:无法从中加载-但可在WAMP上使用

杜俊远
2023-03-14
问题内容

这在我的WAMP服务器上工作正常,但在linux主服务器上不起作用!

try{
    $client = new SoapClient('http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl', ['trace' => true]);
    $result = $client->checkVat([
        'countryCode' => 'DK',
        'vatNumber' => '47458714'
    ]);
    print_r($result);
}
catch(Exception $e){
    echo $e->getMessage();
}

我在这里想念什么?:(

启用了SOAP

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl' : failed to load external entity "http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl"/taxation_customs/vies/checkVatService.wsdl"

从PHP调用URL

从PHP调用URL返回错误

$wsdl = file_get_contents('http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl');
echo $wsdl;

错误

Warning:  file_get_contents(http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl): failed to open stream: HTTP request failed! HTTP/1.0 503 Service Unavailable

从命令行调用URL

从Linux命令行调用URL HTTP 200并返回XML响应

curl http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

问题答案:

对于某些版本的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.wsdl
curl  -A 'cURL User Agent'  -4 http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

这两个IPv4请求均成功。

有趣的情况:)我想您的Linux主机会将ec.europa.eu解析为其IPv6地址,并且您的SoapClient版本默认未添加用户代理字符串



 类似资料:
  • 问题内容: 我一直有一些奇怪的问题。主要的问题是,在尝试将WSDL添加到新项目时,我始终收到以下错误: 这是error.log文件中记录的消息: 我验证了该URL上的应用程序已启动并正在运行,并且可以从Web浏览器访问WSDL,但是无论如何我始终会收到此错误消息。我在Windows 7机器上使用SoapUI 4.5.0(32位)。我也尝试了64位版本,但结果相同。无论我是否使用VPN,都会发生这种

  • 问题内容: 我正在使用apache cxf + spring,这些东西在Eclipse中运行,但不在命令行中运行。不断获取错误无法解决绑定 问题答案: 解决方案: 步骤1:使用Maven Shade插件 第二步:如果您在cxf中使用spring,请确保在@Configuration类中添加以下内容 @ImportResource({“” classpath:META-INF / cxf / cxf

  • 我使用的是ApacheCXF spring,它在eclipse中运行,但不在命令行中运行。keep get无法解析绑定错误

  • 我正在使用Javase6手动部署webservice。我想使用@SchemaValidation来验证SOAP流量。在发布终结点期间,我收到错误: 原因:org.xml.sax.SAXParseException:s4s-att-invalid-value:元素“restriction”中“base”的属性值无效。记录原因:UndeclaredPrefix:无法将“xsd:string”解析为QN

  • 问题内容: 我正在将样式加载器与webpack和react框架一起使用。当我在终端中运行webpack时,尽管我已正确指定了文件路径,但我仍获取import.js文件。 webpack.config.js: 问题答案: 尝试在下面运行脚本: 修改webpack配置,在中添加字段。

  • 我已经使用以下请求生成了一个auth令牌: curl-i-v“https://api.omniture.com/token”-u“my-user”-d“grant_type=client_credentials” 然后,我复制返回的整个对象,如下所示: 编辑 在下面写的答案之后,这是我得到的错误消息: