【问题标题】:Twitter OAUTH - returns response code of "0"Twitter OAUTH - 返回响应代码“0”
【发布时间】:2012-02-21 17:35:09
【问题描述】:

我尝试使用 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'];
}

有人有什么想法吗?

非常感谢。

【问题讨论】:

    标签: php oauth twitter twitter-oauth


    【解决方案1】:

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

    “默认 CURLOPT_SSL_VERIFYPEER 为 true”

    如果您按照 Darren 的建议转储 $connection->response,您可能会看到如下错误:

    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) 到位。

    【讨论】:

    • 谢谢迈克,我的文件中缺少的那一行,终于可以正常工作了 :)
    【解决方案2】:

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

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

    但是,查看源代码会发现两件事。首先你的代码应该和那个一样好,因为$this->response['code'] 被设置为返回的值。其次,该函数(实际上是 curlit())也可以返回 void。当它这样做时,response['code'] 是未定义的。 (在我发现设计错误之前,这看起来像是一个很有前途的 Twitter 库。)

    进一步探索,它只会在$this->config['prevent_request'] 存在且为真时返回void。你没有这样做,我们已经绕了一圈,无法解释你看到的行为。

    因此,我的下一个故障排除步骤是将error_reporting(E_ALL|E_NOTICE) 放在顶部,然后检查错误日志以获取更多线索。在您致电request() 后,也可以使用print_r($connection->response) 看看您还有什么。

    【讨论】:

      【解决方案3】:

      看来您需要确保您拥有当前的证书。

      According to TMH's git repo:

      0.60 版加强了库的安全性,并将 curl_ssl_verifypeer 默认设置为 true。由于一些托管服务提供商不提供最新的证书根文件,它现在包含在 TMH 的存储库中。如果版本过时或者您更喜欢自己下载证书根,您可以从以下地址获取它们:http://curl.haxx.se/ca/cacert.pem

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-10
        • 2018-02-25
        • 2018-03-08
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 2017-01-29
        相关资源
        最近更新 更多