PHP Make SOAP Client Request返回500内部服务器错误

Use*_*rog 0 php soap wsdl web-services

我正在使用PHP来发出SOAP请求.我确实有来自第三方的Web服务的信息.基本上他们给了我什么:

  1. 完整的URI请求(http://xx.xx.xx.xx:xxxxxx/some/services/BasicDo)
  2. 用户名密码

我很新,但我能理解PHP SOAP的工作原理.但是在这个例子中,我发现调用的URL http://xx.xx.xx.xx/services/myservice?wsdl与我对我的内容并不完全相同.这里的其他问题是我应该问他们什么?也许wsdl文件的名称是什么?

到目前为止,我有这个代码与我:

try{
    $client = new SoapClient("http://xx.xx.xx.xx:xxxxx/some/services/BasicDo?wsdl", array('login'=>"myusername",'password'=> "mypwd"));
}
catch(SoapFault $fault) {
    trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
}
Run Code Online (Sandbox Code Playgroud)

但是从控制台,我收到状态500内部服务器错误.我不知道这是怎么回事,我期待来自catch块的东西.有人请告诉我这个.先感谢您.

Dra*_*kes 5

不幸的是,似乎无论你尝试什么(例如传递array('exceptions' => 0),SoapClient()都会在网络连接问题上抛出无法捕获的E_ERROR.这个错误仍然存​​在于PHP 5.5.4(REF)之上.

摘要:

测试脚本:

$client=@new SoapClient('garbage',array('exceptions'=>FALSE));
echo 'OK';
Run Code Online (Sandbox Code Playgroud)

预期结果:我们应该看到"OK",

实际结果:

如果我们register_shutdown_function用来显示内容error_get_last(),我们得到:

Array
(
    [type] => 1
    [message] => SOAP-ERROR: Parsing WSDL: Couldn't load from 'garbage' : failed 
to load external entity "garbage"
)
Run Code Online (Sandbox Code Playgroud)

要解释为什么在不更改系统任何内容的情况下突然收到此错误的原因,并解释为什么SoapClient在本地计算机上而不是在生产系统上运行,这很可能是防火墙问题.

这是另一个报告解决他的问题:

我解决了我的问题.这实际上是我的防火墙的一个问题.防火墙正在丢弃通过PHP发送的数据包,但是没有丢弃通过curl或wget.我为该服务器的所有流量添加了一条规则,并增加了数据包丢弃长度,现在一切正常!

建议:

我最好建议在同一个PHP文件中编写一些代码,调用SoapClient 之前检查SOAP服务url是否解析并正确加载.