【问题标题】:I am getting urllib2.HTTPError: HTTP Error 502: Bad Gateway我收到 urllib2.HTTPError: HTTP Error 502: Bad Gateway
【发布时间】:2016-05-29 05:48:11
【问题描述】:

/* 我正在获取 urllib2.HTTPError: HTTP 错误 502: Bad Gateway.*/

import urllib2
import json

# locu_api = 'd1dab0b393b10f56532cacf6835d2619973f5f46' 
url = 'http://cricapi.com/api/cricketNews'
/*The above url is used from cricapi.com*/
str = ""

json_obj = urllib2.urlopen(url)

data = json.load(json_obj)
i = 0
titles = {}

for item in data['data']:
    if item:
        titles[i] = item['title']
        i+=1
print titles
/*printing all the content fetched from cricapi*/
if not str:
    print "Hello"

构建上述代码后, 我收到以下错误:

Traceback(最近一次通话最后一次):

  File "/home/karthi/Desktop/proj/cric.py", line 51, in <module>
  json_obj = urllib2.urlopen(url).read()
  File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen
  return _opener.open(url, data, timeout)
  File "/usr/lib/python2.7/urllib2.py", line 410, in open
  response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 523, in http_response
  'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 448, in error
  return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain
  result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 531, in http_error_default
  raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
  urllib2.HTTPError: HTTP Error 502: Bad Gateway

一周前。我能够得到结果。但现在我得到了错误。

谁能解释一下我遇到的障碍,也请提供解决方案。

【问题讨论】:

    标签: python json url


    【解决方案1】:

    Karthi,您所说的问题对于许多 API 提供商来说都很常见。如果服务器负载超过该时刻的容量,您可能会从反向代理收到 502 并因此遇到错误情况。

    解决此问题的推荐方法是设置重试次数。例如

    function fetchdata(url) {
      try { 
        // hit the URL and fetch data
      } catch() {
        // retry in case of an error
        return fetchdata(url); 
      }
    }
    

    如果您使用支持回调的语言,另一种方法是重试给定次数,然后调用回调

    function fetchdata(url, callback) {
      try { 
        // hit the URL and fetch data
        // success!
        callback(returndata);
      } catch() {
        // retry in case of an error
        if(exceeded retry count) callback(error); 
    else 
        fetchdata(url, callback); 
      }
    }
    

    注意:这是示例伪代码,不是正确可用的代码,因此请照此处理

    当然,唯一的长期解决办法是与 API 提供商联系并请求他们帮助找出问题所在。大多数 API 提供者往往对服务质量相当敏感,如果他们看到有人面临问题,他们可能会迅速提供帮助。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多