gpt4 book ai didi

json - 如何从 Web 应用程序访问仅限身份验证的 Twitter API 方法

转载 作者:行者123 更新时间:2023-12-04 15:27:07 24 4
gpt4 key购买 nike

我有一个适用于 iPhone 的 Web 应用程序,它最终将在 PhoneGap 应用程序中运行——但现在我在 Safari 中运行它。

该应用程序需要访问来自 Twitter 好友的推文,包括私有(private)推文。所以我使用 Scribe 库实现了 OAuth。我成功地将用户反弹到 Twitter,让他们进行身份验证,然后反弹回来。

此时,Web 应用程序具有本地保存的 oAuth 凭据( key 和 token )。从这里开始,我希望它使用 Twitter statuses/user_timeline.json 方法来获取特定用户的推文。我有应用程序使用 JSONP 请求成功地处理未 protected 推文;当它访问私有(private) Twitter 提要的时间线时,应用程序中会出现一个 HTTP 基本身份验证对话框。

我相信我需要向 Twitter 提供 OAuth 凭据,以便我的 Web 应用程序可以识别和验证自己。 Twitter 建议通过添加 HTTP Authorization header 来执行此操作,但由于我使用 JSONP 处理请求,我认为这不是我的选择。我这样假设是对的吗?

因此,我的选择似乎是将 oAuth 凭据作为查询字符串参数(Twitter 建议反对,但文档建议仍然支持);或通过中间服务器代理所有推文。我宁愿避免后者。

我使用表单的 URL 访问 Twitter API

http://api.twitter.com/1/statuses/user_timeline.json?user_id=29191439&oauth_nonce=XXXXXXXXXXX&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1272323042&oauth_consumer_key=XXXXXXXXXX&oauth_signature=XXXXXXXXXX&oauth_version=1.0

当 user_id 是公共(public)用户时,这可以正常工作。当 user_id 是私有(private)用户时,我会看到那个 HTTP Basic Auth 对话框。知道我做错了什么吗?我希望这是一件令人尴尬的简单事情,比如“忘记一个重要参数”......

最佳答案

根据 http://dev.twitter.com/pages/auth#auth-request,oAuth 节需要准确。 - 我最终构建了一个 Authorization: header ,我可以先用 curl 检查它。

我在 http://hueniverse.com/2008/10/beginners-guide-to-oauth-part-iv-signing-requests/ 使用非常有用的交互式请求检查器构建了它。

这是 protected 用户的好友 API 请求:

curl -v -H '授权:OAuth realm="https://api.twitter.com/1/friends/ids.json", oauth_consumer_key="XXXXXXXXXXXXXXXX", oauth_token="XXXXXXXXXXXXXXXX", oauth_nonce="XXXXXXXXXXXXXXXX", oauth_timestamp ="1300728665", oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_signature="XXXXXXXXXXXXXXXX%3D"' https://api.twitter.com/1/friends/ids.json?user_id=254723679

正如您尝试做的那样,值得重复一遍,而不是通过例如设置 Authorization header 。 jquery 的 beforeSend 函数,对于跨域 JSONP 请求(不能添加 HTTP header ),您可以通过将所有相关的键/值对放在 GET 请求中来发出 oAuth 请求。这应该有望帮助其他各种提问者,例如

  • Set Headers with jQuery.ajax and JSONP?
  • Modify HTTP Headers for a JSONP request
  • Using only JQuery to update Twitter (OAuth)

  • 您的请求看起来有几个问题;它缺少用户的 oauth_token 加上 oauth_signature 看起来不像是经过 base64 编码的(因为它分别缺少十六进制编码的 = 或 ==、%3 或 %3D%3D)。

    这是我使用 oAuth 编码的查询字符串参数的 GET 等效项,您可以在跨域 JSONP 调用中使用它:

    https://api.twitter.com/1/friends/ids.json?user_id=254723679&realm=https://api.twitter.com/1/friends/ids.json&oauth_consumer_key=XXXXXXXXXXXXXXXX&oauth_token=XXXXXXXXXXXXXXXX&oauth_nonce=XXXXXXXXXXXXXXXX&oauth_timestamp=1300728665&oauth_signature_method= SHA1&oauth_version=1.0&oauth_signature=XXXXXXXXXXXXXXXX%3D

    关于json - 如何从 Web 应用程序访问仅限身份验证的 Twitter API 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752168/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com