0

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

Al-Punk
  • 3,531
  • 6
  • 38
  • 56

1 Answers1

1

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.

edigu
  • 9,878
  • 5
  • 57
  • 80
  • Nothing changed after adding a reference CURLOPT_CAINFO => '/etc/ssl/certs/ca-bundle.crt' – Al-Punk Nov 21 '14 at 12:34
  • Interesting. Did you try running this on a production or staging server? You may also need to create a self-signed certificate for your local development environment. For example: http://www.akadia.com/services/ssh_test_certificate.html – edigu Nov 22 '14 at 10:51