为什么Soap不能连接到HTTPS?

时间:2013-12-12 02:07:44

标签: php ubuntu soap ssl https

我正在尝试连接到HTTPS location。目前我收到Could not connect to host错误。我正在测试两个Ubuntu服务器。在一个非现场的Ubuntu服务器上发生此错误。现场开发服务器上的另一台服务器工作正常。我搜索了服务器文件,但尚未发现会导致此类问题的系统中的任何差异。我还没有找到有类似问题的人,并尝试了许多与同一错误消息相关的不同解决方案(例如,禁用wsdl缓存等等)。

  • HTTP在两台服务器上都能正常运行
  • HTTPS在一台服务器上运行
  • php.ini文件是相同的
  • phpinfo();中启用了OpenSSL和Soap显示(HTTP有效,所以我认为Soap很好)
  • wget https://exampleurl.com/services/SessionService在收到错误的服务器上正常工作

接下来我应该看什么?

我可以做什么测试?

如何获取有关错误的附加信息?

$sessionService = new SessionService('/path/to/local/file/SessionService.wsdl', array(
          'location' => "https://exampleurl.com/services/SessionService"
      ));

try {
    // throws SoapFault error   
    $token = @Login($sessionService, $username, $password);
}
catch (SoapFault $sf) {
    //echo $sf->getMessage());
    //echo $sf;
}

SessionService类:

class SessionService extends SoapClient {

    private static $classmap = array(
        'login' => 'login',
        'loginResponse' => 'loginResponse',
        ...
    );

    public function SessionService($wsdl = "http://localhost:8080/services/SessionService?wsdl", $options = array()) {
        foreach (self::$classmap as $key => $value) {
            if (!isset($options['classmap'][$key])) {
                $options['classmap'][$key] = $value;
            }
        }
        parent::__construct($wsdl, $options);
    }


    //fails here
    public function login(login $parameters) {
        return $this->__soapCall('login', array($parameters), array(
            'uri' => 'http://example.url.com',
            'soapaction' => ''
            )
        );
    }

    //... other functions

}

2 个答案:

答案 0 :(得分:1)

WireSharktcpdump或类似工具可能是您最好的选择,以了解http请求出了什么问题。您将无法从PHP中的客户端代码调试实际的http请求,因为所有这些都在SOAP扩展中(用C语言编写)。

答案 1 :(得分:0)

确保在php.ini中启用了openssl扩展名。

;for windows
extension=php_openssl.dll 
;for unix 
extension=openssl.so