【问题标题】:Python - Heroku urllib2.HTTPErrorPython - Heroku urllib2.HTTPError
【发布时间】:2012-07-12 11:07:48
【问题描述】:

过去一天左右,我与一个小组一起创建了一个 facebook 应用程序,该应用程序可以计算用户的集群系数(衡量他们朋友之间相互联系的指标。)
为了做到这一点,我需要获取用户与其每个朋友的共同朋友的数量。不幸的是,我不断收到 urllib2.HTTPError,我不知道发生了什么。您可以在https://gentle-stream-3754.herokuapp.com/ 访问该应用程序(以及错误消息 + 回溯)。

特别是第 168 行是回溯的一部分。我知道如果没有上下文,下面的代码很可能不会有帮助,所以这就是为什么我包含了应用程序的链接。

会不会是用户权限的问题?运行?

任何帮助将不胜感激!提前致谢!

编辑:access_token 似乎是一个 NoneType 对象,但我不完全确定为什么。这会导致 urllib2.HTTPError 吗?

164 def clustering_coefficient():
165 
166     access_token = get_token()
167     g = Graph(access_token)
168     requests = [{'method': 'GET', 'relative_url': 'me/mutualfriends/%s' % x['id']} for x in g.me.friends()['data']]
169     k_v = len(requests)
170     if k_v < 2:
171         return 0.0
172 
173     n_v = 0
174     REQS_PER_POST = 50 
175     for i in range((k_v // REQS_PER_POST)+1):
176         result = g.post(batch=json.dumps(requests[i*REQS_PER_POST:(i+1)*REQS_PER_POST]))
177         for r in result:
178             body = json.loads(r['body'])
179             n_v += len(body['data'])
180 
181     return 1.0 * n_v / k_v/ (k_v-1)

异常:HTTPError:HTTP 错误 400:错误请求

追溯:

Traceback (most recent call last)
File "/app/lib/python2.7/site-packages/flask/app.py", line 1306, in __call__
return self.wsgi_app(environ, start_response)
File "/app/lib/python2.7/site-packages/flask/app.py", line 1294, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/app/lib/python2.7/site-packages/flask/app.py", line 1292, in wsgi_app
response = self.full_dispatch_request()
File "/app/lib/python2.7/site-packages/flask/app.py", line 1062, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/app/lib/python2.7/site-packages/flask/app.py", line 1060, in full_dispatch_request
rv = self.dispatch_request()
File "/app/lib/python2.7/site-packages/flask/app.py", line 1047, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/app/exampleapp.py", line 168, in clustering_coefficient
requests = [{'method': 'GET', 'relative_url': 'me/mutualfriends/%s' % x['id']} for x in g.me.friends()['data']]
File "/app/lib/python2.7/site-packages/facegraph/graph.py", line 157, in __call__
data = json.loads(self.fetch(self.url | params))
File "/app/lib/python2.7/site-packages/facegraph/graph.py", line 203, in fetch
conn = urllib2.urlopen(url, data=data)
File "/usr/local/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/local/lib/python2.7/urllib2.py", line 400, in open
response = meth(req, response)
File "/usr/local/lib/python2.7/urllib2.py", line 513, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/local/lib/python2.7/urllib2.py", line 438, in error
return self._call_chain(*args)
File "/usr/local/lib/python2.7/urllib2.py", line 372, in _call_chain
result = func(*args)
File "/usr/local/lib/python2.7/urllib2.py", line 521, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)

【问题讨论】:

  • 能否包含完整的回溯和异常?
  • 当然!我一开始就应该这样做。更新:添加了回溯和异常。

标签: python heroku urllib2 http-error


【解决方案1】:

看起来这是面部图库的问题 - 它正在发送一个接收到 400 状态代码的请求。你用的是最新版本吗?是否有可能是 Facebook API 中的某些更改导致 facegraph 现在出现问题?

【讨论】:

  • 我用的是最新版本,所以我认为不是facegraph的错。我认为更有可能是我做错了什么。我怀疑第 166-167 行。经过一番修改,我发现 access_token 是一个 NoneType 对象。问题是,我不确定为什么。
  • 是时候检查一下 get_token() 发送给您的内容了。 :)
  • get_token() 是heroku提供的一个函数。这是它的要点:
  • from urlparse import parse_qs r = requests.get('https://graph.facebook.com/oauth/access_token', params=params) token = parse_qs(r.content).get('access_token') return token 不太清楚如何格式化,但你明白了。
  • 听起来您没有从 Facebook 获得 access_token - 恐怕我还没有处理过这个问题,所以我无能为力,但您可以尝试查看 Facebook 的oAuth 文档,看看是否遗漏了什么(可能是 API 密钥或秘密)。
猜你喜欢
  • 2013-01-27
  • 2014-09-05
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 2013-07-16
  • 1970-01-01
  • 2017-12-29
  • 2017-04-22
相关资源
最近更新 更多