ZendService Twitter fails on Client connect()

148 views Asked by At

Having problems connecting with the Twitter API through ZendService/Twitter/Twitter.

Error:  Fatal error: Call to a member function connect() on a non-object in somepath/vendor/zendframework/zendframework/library/Zend/Http/Client.php on line 1358



$config = array (
                'access_token' => array (
                        'token' => 'dummy',
                        'secret' => 'dummy' 
                ),
                'oauth_options' => array (
                        'consumerKey' => 'dummy',
                        'consumerSecret' => 'dummy' 
                ),
                'http_client_options' => array (
                        'adapter' => 'Zend\Http\Client\Adapter\Curl',
                        'curloptions' => array (
                                CURLOPT_SSL_VERIFYHOST => false,
                                CURLOPT_SSL_VERIFYPEER => false 
                        ) 
                ) 
        );

        $twitter = new Twitter ( $config );
        print_r ($twitter->account->verifyCredentials ());

Using curl 7.26.0 (x86_64-pc-linux-gnu) OpenSSL/1.0.1e PHP 5.4.35 on ZF 2.3.3

Update 1: Removing the access_token section returns an "Bad Authentication data" message. Enabling it again, will throw the atal error: Call to a member function connect() on a non-object in somepath/vendor/zendframework/zendframework/library/Zend/Http/Client.php on line 1358

1

There are 1 answers

2
edigu On

Twitter allows only SSL connections in Twitter API endpoints. This detail is documented here. So, you need to set your adapter options to meet the SSL protocol requirements.

Try this:

'http_client_options' => array (
    'adapter' => 'Zend\Http\Client\Adapter\Curl',
    'curloptions' => array (
        CURLOPT_SSL_VERIFYHOST => 2,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_CAINFO => '/path/to/certs/ca-bundle.pem'
    ) 
),

When verifying a remote host, you need to provide one or more certificates of trusted CAs. The value 2 for VERIFYHOST option is required to checking the existence of a common name and also verifies that it matches the hostname provided. Use 1 for only check existence of name in the SSL peer certificate.

You may also want to read more about configuring SSL connections using Curl adapter in this nice tutorial.