我正在尝试使用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