php SoapClient无法连接,但命令行curl调用有效

时间:2017-07-17 17:58:53

标签: php soap wsdl ssl-certificate

我有一个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使用相同的端口,因此它不应该是防火墙问题。

非常感谢任何有助于识别问题或帮助我找出错误的帮助。

1 个答案:

答案 0 :(得分:0)

原来这似乎是一个防火墙问题。我打开了从服务器1到服务器2的所有访问权限,事情就开始了。不太清楚问题是什么。我将选项缩减为登录名和密码,它仍在运行。防火墙通常就是答案。

非常感谢有关防火墙,正确端口及其无法正常工作的任何想法。

为什么cURL正在工作而SOAP没有?