【问题标题】:Urllib - HTTP 403 error with no message (Facebook notification)Urllib - 没有消息的 HTTP 403 错误(Facebook 通知)
【发布时间】:2013-07-30 20:31:18
【问题描述】:

我已成功使用以下 Python 代码(在本地主机上的 Google App Engine 服务器上运行)向自己发送 Facebook 通知。我使用 Facebook 通知的template 功能将 Facebook 用户 ID 扩展为通知文本中的粗体名称:

url = 'https://graph.facebook.com/'+myOwnID+'/notifications'

values = {'access_token' : 426547656256546|4fhe34FJdeV3WvfF6SNfehs7GfW
                  'href' : 'http://localhost:8080/', 
              'template' : '@['+myOwnID+'] says hi.'}

req = urllib2.Request(url, urllib.urlencode(values))
urllib2.urlopen(req)

请注意,应用访问令牌是虚构的,但与真实令牌具有相同的格式。

当我将模板的 ID 更改为我的一位朋友的 ID 时:

url = 'https://graph.facebook.com/'+myOwnID+'/notifications'

values = {'access_token' : 426547656256546|4fhe34FJdeV3WvfF6SNfehs7GfW
                  'href' : 'http://localhost:8080/', 
              'template' : '@['+myFriendID+'] says hi.'}

req = urllib2.Request(url, urllib.urlencode(values))
urllib2.urlopen(req)

我得到了错误

HTTP Error 403: Forbidden

即使我将 ID 硬编码到模板中,它的工作原理也是一样的,因此这不是变量值不正确的问题。

为什么第二种情况不起作用?我该如何解决?

【问题讨论】:

  • 错误响应的文本是什么?知道 HTTP 错误代码是不够的
  • @Igy 感谢您的建议 - 因为我是 Web 开发新手,所以我不知道我能得到的不仅仅是错误代码。

标签: python facebook urllib2 urllib http-status-code-403


【解决方案1】:

我没有意识到 urllib2 可以打印比状态码更详细的错误消息,方法是将最后一行替换为:

try:
    urllib2.urlopen(req)
except urllib2.HTTPError, error:
    logging.info(error.read()) # or "print error.read()"

这给出了明确的错误信息:

{"error":{"message":"(#200) Cannot tag users who have not installed the app","type":"OAuthException","code":200}}

要更全面地讨论 urllib2 的 403 状态代码行为,请参阅 123

【讨论】:

    【解决方案2】:

    根据您的错误消息,您的朋友必须安装您的应用才能让您向他们发送通知。你无法解决这个问题。

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      相关资源
      最近更新 更多