我有一个LAMP服务器(#1)通过SOAP与另一台服务器(#2)通过WSDL进行通信。如果我在服务器1的命令行上发出一个curl调用到服务器2的URL,它可以正常工作并获得相应的WSDL响应,但是同一个URL的php soapclient正在获得"无法加载外部实体& #34;错误。这在我们在服务器2上拥有自签名证书之前有效,但在我们升级到CA证书的同时退出工作。
有趣的是这个服务器与另一个服务器在不同的位置(不同的操作系统,但是相同的PHP代码/数据库)进行负载平衡,而第二个服务器根本没有任何问题。
以下是我为soap客户端使用的代码:
function getSoapClient(){
ini_set("soap.wsdl_cache_enabled", 0);
// standard soap client for application service
$post_url = lum_getString("[CAMPAIGN_POST_URL]").
"?enterprise=".lum_getString("[CAMPAIGN_ENTERPRISE]").
"&company=".lum_getString("[CAMPAIGN_COMPANY]");
$options = array(
'trace' => true,
'cache_wsdl' => WSDL_CACHE_NONE,
'exceptions' => 1,
'verifypeer' => false,
'verifyhost' => false,
'allow_self_signed' => true,
'login' => lum_getString("[CAMPAIGN_POST_ID]"),
'password' => lum_getString("[CAMPAIGN_POST_LC]"),
);
$context = stream_context_create(
array(
'user_agent' => 'PHPSoapClient',
'ssl' => array(
'verify_peer' => false,
'allow_self_signed' => true,
),
'https' => array(
'curl_verify_ssl_peer' => false,
'curl_verify_ssl_host' => false,
)
)
);
$options['stream_context'] = $context;
$client = new SoapClient($post_url."&wsdl",$options);
return $client;
}
curl和soapclient使用相同的端口,因此它不应该是防火墙问题。
非常感谢任何有助于识别问题或帮助我找出错误的帮助。
答案 0 :(得分:0)
原来这似乎是一个防火墙问题。我打开了从服务器1到服务器2的所有访问权限,事情就开始了。不太清楚问题是什么。我将选项缩减为登录名和密码,它仍在运行。防火墙通常就是答案。
非常感谢有关防火墙,正确端口及其无法正常工作的任何想法。
为什么cURL正在工作而SOAP没有?