【问题标题】:How to use twitter api with "http basic auth"?如何将 twitter api 与“http 基本身份验证”一起使用?
【发布时间】:2010-10-28 03:48:41
【问题描述】:

如何使用带有“http basic auth”的twitter api?

我想我应该使用“消费者密钥”!因为 twitter 给了你每小时请求的限制率,如果我不使用我的消费者密钥,他们如何计算我的请求?

【问题讨论】:

    标签: php api authentication twitter


    【解决方案1】:

    当你想对任何东西使用 HTTP 基本身份验证时,如果你想忽略实际的实现和 HTTP 标头,只需使用cURL。这是一个简单的 PHP 示例,cURL 也可以在其他语言中使用:

    <?php
    $ch = curl_init();
    // Sets the URL cURL will open
    curl_setopt($ch, CURLOPT_URL, 'http://twitter.com/statuses/user_timeline.xml?screen_name=al3x');
    // Here's the HTTP auth
    // The 3rd argument is your Twitter username and password joined with a colon
    curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
    // Makes curl_exec() return server response
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Lately the Twitter API expects an Expect header. It's a mystery
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
    // And here's the result XML
    $twitter_xml = curl_exec($ch);
    curl_close($ch);
    ?>
    

    然后$twitter_xml 将包含 al3x 的公共时间线的 XML。就速率限制而言,ceejayoz 已经很好地回答了这个问题。

    【讨论】:

      【解决方案2】:

      经过身份验证的 API GET 请求计入您的用户帐户的计数中。

      未经身份验证的 API GET 请求(某些方法允许)计入您的 IP 地址计数。

      POST 请求不受速率限制。

      More details are available in the Twitter docs.

      【讨论】:

      • 谢谢,如果它计入您的用户帐户的计数中?当 Twitter 向我的新 Web 应用程序发出 20000 请求时?他们如何识别这个请求是来自这个应用程序还是那个应用程序?可能是消费者密钥或域名!?
      • 当您注册白名单时(以获得 20k req/hr 限制),您必须提供 IP 地址。然后,来自该 IP 地址的所有请求都将计入 20k/hr 限制,无论是由哪个用户或应用程序发出请求。
      【解决方案3】:

      我认为他们会计算来自同一 IP 的请求 - 但我没有仔细检查。

      即使是动态 IP 地址对于会话来说也是静态的,并且在没有任何其他识别信息的情况下,这是唯一能将您与其他用户区分开来的东西。

      正如其他发帖人所说 - 如果你有钥匙,还有更好的方法。

      【讨论】:

      • 为什么投反对票?我说我不确定,但@ceejayoz 已经确认了。
      • 谢谢,我也认为他们计算了来自 IP 的请求,我不知道谁对你的答案投了反对票,但我会放弃投票。谢谢
      • 我不介意被否决 - 但很高兴知道为什么这样我可以在错误的地方纠正我的答案。
      【解决方案4】:
      $twitter = file_get_content("http://user:password@twitter.com/blabla");
      

      more about native HTTP Wrapper support in PHP

      【讨论】:

        【解决方案5】:

        我最近写了一些 PHP 来发布到 Twitter 这是它的工作部分:

        $message = 'A new revision (#' . $data['revision'] . ') was commited by ' . $data['author'] . ': ' . $data['message'] . "";
        
        $message = substr($message, 0, 140);
        
        $content = 'status=' . urlencode($message);
        $packetString = "POST /statuses/update.xml HTTP/1.1\r\n";
        $packetString .= "Authorization: Basic " . base64_encode($username . ":" . $password) . "\r\n";
        $packetString .= "Content-Length:" . strlen($content) . "\r\n";
        $packetString .= "HOST: twitter.com\r\n";
        $packetString .= "\r\n" . $content . "\r\n";
        
        $sock = fsockopen('twitter.com', 80);
        fwrite($sock, $packetString);
        //This is some logging, to a local file so I can monitor local what's going on
        $response = fread($sock, 10240);
        fwrite($fh, $packetString . "\r\n\r\n\r\n" . trim($response) . "\r\n\r\n\r\nD:\r\n" . $d);
        fclose($fh);
        

        您可以在这里看到它的实际效果:http://twitter.com/fmsvn 使用来自我们的 SVN 服务器的回调我将 SVN 消息发布到项目 Twitter Feed。

        【讨论】:

        • 当 PHP 支持 cURL 时,为什么要使用原始套接字?
        • 我喜欢套接字,因为我(个人)认为它比 cURL 更容易,更不用说有很多(糟糕的)共享托管公司没有安装 cURL。
        猜你喜欢
        • 2014-06-06
        • 2015-12-01
        • 2018-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        • 2014-01-22
        相关资源
        最近更新 更多