![](/img/trans.png)
[英]HTTP Error 403 Forbidden with urllib2 but not with urllib with facebook graph api
[英]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}}
根据您的错误消息,您的朋友似乎必须安装您的应用程序才能向他们发送通知。 您无法采取任何措施来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.