我尝试使用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'];
}
有人有什么想法吗?
非常感谢。
答案 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)
看起来您需要确保拥有最新证书。
版本0.60强化了库的安全性,并将curl_ssl_verifypeer默认为true。由于某些托管服务提供商不提供最新的证书根文件,因此它现在包含在TMH的存储库中。如果版本已过期或您希望自己下载证书根,则可以从以下位置获取证书:http://curl.haxx.se/ca/cacert.pem
在升级您使用的tmhOAuth版本之前,请务必通过运行examples / verify_ssl.php脚本验证服务器上的SSL处理是否正常。