Twitter API + OAuth:无法发送状态更新,收到401错误

12

我正在尝试使用Twitter的API和OAuth发送状态更新(新推文)。我正在使用Shannon Whitley的.NET代码示例 http://www.voiceoftech.com/swhitley/?p=681 (根据Twitter API文档的建议)。我可以使用OAuth正常读取(GET),但是当我尝试通过http://twitter.com/statuses/update.xml进行状态更新(使用POST)时,它返回一个401并带有以下XML:

<?xml version="1.0" encoding="UTF-8"?>
<hash>
  <request>/statuses/update.xml</request>
  <error>Read-only application cannot POST</error>
</hash>

我发誓我已经设置了我的应用程序来使用读和写权限,Twitter的授权页面(http://twitter.com/oauth/authorize)甚至显示“应用程序TweeVerbs.com(开发版)想要在Twitter上访问和更新您的数据。”

但是它仍然显示“只读应用程序无法发布”。WTF!?

我已经谷歌这个错误消息了,但是没有结果。我找到一个地方说要将查询字符串参数oauth_access_type=write添加到重定向URL中,该URL将跳转到Twitter的授权页面。我做到了,但它仍然给我返回401错误。


如果有帮助的话,这里是根据OAuth流程发送和接收的数据:

请求授权令牌:

http ://twitter.com/oauth/request_token?oauth_consumer_key=tViV8vAt4cqSKbGdPGWT7Q&oauth_nonce=2790042&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1244567068&oauth_version=1.0&oauth_signature=KzxcXN%2bQ0AJoAJ%2flQfzs8SLjC%2fQ%3d

生成授权重定向URL:

http ://twitter.com/oauth/authorize?oauth_token=EpyBg3nJGOmtmBjRUAsqqaGHARb2F2F2VcccqHkwio&oauth_access_type=write

授权页面的消息:“应用程序TweeVerbs.com(开发版)想要在Twitter上访问和更新您的数据。此应用程序计划在未来使用Twitter登录您。如果您想连接到除Sironfoot之外的帐户,请注销。”

获取访问令牌:

http ://twitter.com/oauth/access_token?oauth_consumer_key=tViV8vAt4cqSKbGdPGWT7Q&oauth_nonce=2016804&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1244567166&oauth_token=EpyBg3nJGOmtmBjRUAsqqaGHARb2F2F2VcccqHkwio&oauth_version=1.0&oauth_signature=%2bEVQUxUPLT%2b%2bkfaG0Vq1YJZXcAw%3d

状态更新API调用: URL - http ://twitter.com/statuses/update.xml POST 数据 - oauth_consumer_key=tViV8vAt4cqSKbGdPGWT7Q&oauth_nonce=5707692&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1244567268&oauth_token=19130957-nb89DjZhjCAzcbHUa96yRWHqlQFQIJ0AKyXpqnHt1&oauth_version=1.0&status=HelloWorld&oauth_signature=WqA%2bWY0IxveeSJ7G3Ewy3whh1sE%3d


“状态更新API调用”是不是缺少“oauth_verifier”参数?我只能在包括这个参数的情况下进行发布...还有“oauth_callback”... - BrunoLM
哇,这既是一个问题,也是一个非常好的简化 Twitter oauth 流程备忘录。1000天后救了我的一天。 - Léon Pelletier
5个回答

15

我不知道问题出在哪里,但我在 Twitter 上删除了我的应用程序注册(您必须在 Twitter 上注册应用程序以获取 OAuth 密钥等),然后重新创建。现在它正常工作了。很奇怪,可能是 Twitter 弄错了。

我还在使用 Tweetsharp (http://tweetsharp.com/),强烈推荐它,它有一个不错的流畅 API。注意:切换到 Tweetsharp 不是解决问题的方法,直到我删除并重新创建了 Twitter 上的应用程序注册后才解决了问题。


1
这也解决了我的问题...看起来twitter在将只读应用程序更改为读写时存在问题。 - sean
1
删除并重新创建了 Twitter 应用程序。我认为第二次没有做任何不同的事情,但它起作用了。 - IMAbev
谢谢!这真的救了我的命。Twitter 对此有一个 bug。 - user503853
3
我只需要在我的应用程序“详情”页面上点击“重新生成我的访问令牌”按钮。(不确定此答案发布时该按钮是否存在。) - Alex Reisner
Tweetsharp现在已经被放弃了。http://www.twitterizer.net/是当今在ASP.NET中与Twitter通信的方式。 - Lloyd Powell
我曾经遇到过同样的问题,但是在像 @AlexReisner 建议的那样重新创建访问令牌之后,推文成功地被发送了。 - Jamie Keeling

8
如果您在应用程序设置为“只读访问”模式下授权应用程序访问您的Twitter帐户,并且在将应用程序设置更改为“读写访问”后出现“只读应用程序无法发布”错误,则必须在https://twitter.com/settings/connections上撤消对该应用程序的访问权限,然后重新授权。 “只读” access_token 往往会保持不变,直到您撤销它。

真是救了我的命啊!我为“只读应用程序无法发布”苦苦挣扎了一个小时……我已经重新创建了应用程序好几次,但每次访问令牌都是在应用程序设置“读/写”选项之前生成的。 - mcmil
完美 :) :) 謝謝.. 這非常有幫助 :) - Apoorva

3

希望这可以帮助您。


1

另外,还要检查您的系统时钟是否与互联网同步;在Windows上,您可以通过调整日期时间设置来完成。

因为如果您的时钟未同步,您将收到401未经授权的异常;祝您好运,干杯!


非常准确 - 我也遇到了同样的问题 - 感谢您发布这篇文章,让我得以解决我的问题。 - Graeme

0

我已经尝试了几次,但都没有成功,当我请求Twitter的访问令牌时,我遇到了401异常。

我也在使用Tweetsharp。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接