繁体   English   中英

Urllib-HTTP 403错误,无消息(Facebook通知)

[英]Urllib - HTTP 403 error with no message (Facebook notification)

我已成功使用以下Python代码(在本地主机上的Google App Engine服务器上运行)将Facebook通知发送给自己。 我使用Facebook通知的模板功能将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硬编码到模板中,它的工作原理也一样,因此这不是变量值不正确的问题。

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

我没有意识到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

根据您的错误消息,您的朋友似乎必须安装您的应用程序才能向他们发送通知。 您无法采取任何措施来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM