Twitter OAUTH - 返回响应代码“0”

时间:2012-01-29 17:30:53

标签: php oauth twitter twitter-oauth

我尝试使用Matt Harris的Twitter OAUTH库(https://github.com/themattharris/tmhOAuth)用我的密钥和令牌替换默认数据,但由于某种原因我无法获得有效的响应代码。

我正在测试的url端口有一个端口(8888),但我不确定是否与它有关。我正在拖尾PHP日志,没有错误。

$tweet_text = 'Hello world!';
print "Posting...\n";
$result = post_tweet($tweet_text);
print "Response code: " . $result . "\n";

function post_tweet($tweet_text) {

  require_once('tmhOAuth.php');

  $connection = new tmhOAuth(array(
    'consumer_key'    => '(hidden)',
    'consumer_secret' => '(hidden)',
    'user_token'      => '(hidden)',
    'user_secret'     => '(hidden)',
  )); 

  $connection->request('POST', 
    $connection->url('1/statuses/update'), 
    array('status' => $tweet_text));

  return $connection->response['code'];
}

有人有什么想法吗?

非常感谢。

3 个答案:

答案 0 :(得分:14)

我遇到了这个问题,这是由于2011年12月最近的变化:

  

“将CURLOPT_SSL_VERIFYPEER默认为true”

如果您按照Darren的建议转储$ connection->响应,您可能会看到一个错误,例如我的错误:

  

string(165)“错误设置证书验证位置:”

确保证书文件cacert.pem到位,或禁用SSL_VERIFYPEER。

我愿意打赌这会解决您的问题(虽然它可能不是最安全的解决方案):

$connection = new tmhOAuth(array(
    'consumer_key'          => '(hidden)',
    'consumer_secret'       => '(hidden)',
    'user_token'            => '(hidden)',
    'user_secret'           => '(hidden)',
    'curl_ssl_verifypeer'   => false
));

2015年2月更新

回顾今天的答案,我意识到建议人们将curl_ssl_verifypeer设置为false并不是一个很好的答案(此时你不能再确定你正在与Twitter交谈,所以实际上这是一个可怕的答案)。而是采取我给出的其他建议,并确保适当的根CA证书文件(cacert.pem)到位。

答案 1 :(得分:1)

如果您与https://github.com/themattharris/tmhOAuth/blob/master/examples/tweet.php进行比较,您的代码可能需要更改为:

$code=$connection->request('POST', ...);
return $code;

然而,查看源代码,揭示了两件事。首先,您的代码应该与此一样好,因为$this->response['code']设置为返回的值。其次,该函数(实际上curlit())也可以返回void。确实如此response['code']未定义。 (在看到设计错误之前,这看起来像是一个很有前途的推特库。)

进一步探讨,只有当void存在并且为真时,它才会返回$this->config['prevent_request']。你没有那样做,而且我们已经完全没有解释你所看到的行为。

因此,我的下一个问题排查步骤是将error_reporting(E_ALL|E_NOTICE)置于顶部,然后检查错误日志以获取更多线索。拨打print_r($connection->response)电话后,还要request()看看你还有什么。

答案 2 :(得分:1)

看起来您需要确保拥有最新证书。

According to TMH's git repo:

版本0.60强化了库的安全性,并将curl_ssl_verifypeer默认为true。由于某些托管服务提供商不提供最新的证书根文件,因此它现在包含在TMH的存储库中。如果版本已过期或您希望自己下载证书根,则可以从以下位置获取证书:http://curl.haxx.se/ca/cacert.pem

在升级您使用的tmhOAuth版本之前,请务必通过运行examples / verify_ssl.php脚本验证服务器上的SSL处理是否正常。