为什么会出现“只读应用程序无法进行POST请求”错误?

36

日志记录:

12-05 23:37:01.721:W/System.err(534):  401:Authentication credentials  (https://dev.twitter.com/docs/auth) were missing or incorrect. Ensure that you have set valid     conumer key/secret, access token/secret, and the system clock in in sync.
12-05 23:37:01.721: W/System.err(534): 401:Authentication credentials (https://dev.twitter.com/docs/auth) were missing or incorrect. Ensure that you have set valid conumer key/secret, access token/secret, and the system clock in in sync.
12-05 23:37:01.721: W/System.err(534): error - Read-only application cannot POST
12-05 23:37:01.721: W/System.err(534): request - /1/statuses/update.json

尽管我可以通过(getScreenName()函数)读取屏幕名称并将读写权限设置到我的twitter应用程序,但它会产生上述logcat。而我正在使用twitter4j jar文件。


看起来您没有包含一个账户的身份验证数据。请发布您的代码。 - Ted Hopp
这是我的完整代码 http://stackoverflow.com/questions/8382021/i-am-trying-to-update-status-to-twitter-using-twitter4j-jar-but-it-does-not-work - sayem siam
请不要重新提交相同的问题。 - Ted Hopp
但是那时我没有得到答案,真的被这个问题困住了。我看了所有正确编写代码的文档,但它并没有起作用。 - sayem siam
那个问题只有11小时的历史。阅读常见问题解答,了解在没有得到答案时该怎么做。 - Ted Hopp
9个回答

75
  • 登录您的应用程序:http://dev.twitter.com/apps
  • 在“设置”选项卡中,将“应用程序类型”更改为“读、写和访问直接消息”。
  • 在“重置密钥”选项卡中,点击“重置”按钮,然后相应地更新应用程序中的消费者密钥和密钥。

看起来重置密钥会强制更改应用程序类型生效。


4
我不确定原因,但是重新设置我的消费者密钥和密钥并未解决我发送私信的问题。尽管我重新启动了应用程序、手动撤销了App并再次授权、重新运行了测试,但仍然收到“只读应用程序无法进行POST”错误提示。最终,我重新创建了我的访问令牌(在dev.twitter.com上App '详情'窗格中的“重新创建我的访问令牌”按钮),这样直接消息就可以发送了。我无法确定是否需要这样做,或者消费者密钥/密钥重置是否有效,只是我可能没有等待足够长的时间以使其生效。 - Neek
6
在修改权限后,您需要重新生成访问令牌和访问令牌密钥。 - user3732708

24

2022年更新

之前发布的所有解决方案都已经失效了。以下是当前的解决方法:

  1. 选择您的应用程序
  2. 编辑认证设置
  3. 启用OAuth1
  4. 选择所需权限
  5. 输入回调URL(可以是任何内容)
  6. 重新生成API令牌(注意:必须这样做,否则此过程将无法正常工作)

仪表盘(步骤1 + 2)

输入图像描述

设置(步骤3 + 4)

输入图像描述


1
这是自2022年以来唯一的选择。忘记所有其他解释。 - Edd
现在是2022年底,OAuth 2.0仍然有效,但本答案中的其他内容仍然准确,谢谢! - Veve

3
前往https://dev.twitter.com/ -> 我的应用程序 -> "进入您当前的应用程序" -> 设置 -> 授予“读取,写入和直接访问”权限 -> 保存。之后,请从模拟器或设备卸载您的项目,- > 清除项目 -> 运行项目。希望这对您有所帮助。

3

解决该问题的步骤如下:

使用以下链接登录:https://dev.twitter.com/apps,然后进入“设置”页面。

将权限从 只读 更改为 读取、写入和访问直接消息,并更新页面。如果无法更新,则重新创建令牌并尝试解决问题。


2
可能是您的 Twitter 应用程序出了问题: 写入权限可能仍然存在,这会导致问题:
前往 https://dev.twitter.com/ -> 我的应用程序 -> "前往您当前的应用程序" -> 设置 -> 授予 "读取、写入和直接访问" 权限 -> 保存。之后从模拟器或设备中卸载您的项目,-> 清除项目 -> 运行项目。
希望这有所帮助。

2

2
补充@Hemangi的回答,您不必重新生成使用者密钥和密钥。在Twitter开发人员门户网站上转到“Keys and Tokens”选项卡并检查访问令牌。

enter image description here

如果显示仅使用只读权限创建,则重新生成访问令牌和密钥,并在代码中更新相应部分。

enter image description here


我做到了,但是创建了相同的...只有读取权限。 - Ateş Danış
1
@AteşDanış,您需要为您的项目授予写入权限,然后重新生成令牌。前往“您的项目>设置>用户身份验证设置>应用程序权限”。将其从“读取”更改为“读取和写入”。 - Vignesh Nandakumar

0
  1. 前往门户
  2. 选项: 项目和应用程序选项卡。
  3. 在此选项中,进入设置,应用程序权限并将只读更改为读取+写入+发布读取直接消息
  4. 保存
  5. 最后,转到密钥和令牌选项卡,仅重新生成访问令牌和密钥

0

你是否已经在 Twitter 上注册了你的应用程序以获取你的消费者密钥?


是的,我已经注册了应用程序以获取消费者秘钥。 - sayem siam
在这里,您可以找到整个代码:http://stackoverflow.com/questions/8382021/i-am-trying-to-update-status-to-twitter-using-twitter4j-jar-but-it-does-not-work - sayem siam
我真的卡在这里了。谢谢。 - sayem siam

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