【问题标题】:1+ GET request returning error 403 to heroku python1+ GET 请求返回错误 403 到 heroku python
【发布时间】:2016-08-26 03:23:28
【问题描述】:

我在我的脚本中使用了一个 api。当我通过自己的终端运行脚本时,我可以成功地对端点进行 3 次调用。但是当我在 heroku bash 上运行相同的脚本时,只有第一个调用成功,其他两个返回错误 403。这是我的代码

results = []

    for level in levels:
            headers={'User-Agent': 'Mozilla/5.0'}
            res = requests.get(url+level,headers=headers)
            if res.status_code==200:
                res = json.loads(str(res.content))
                print "success"
                #do something
            else:
                print "Error",str(res.status_code)
        return results

在我的终端输出是

  success
  success
  success

在 heroku bash 中,输出是

  success
  Error 403
  Error 403

我也试过不带 User-Agent 标头,但同样的问题仍然存在。

【问题讨论】:

    标签: python heroku


    【解决方案1】:

    这是一个权限错误。我的猜测是,当您从浏览器运行此程序时,第一页会设置各种 cookie,而第二个和第三个请求需要这些 cookie。

    一个快速的解决方法,IF 这就是问题所在,是使用请求的 Session() 对象。这会存储 cookie 并在后续请求中将它们发送回,这有点像普通浏览器。

    results = []
    mySession = requests.Session()
    
    for level in levels:
        headers={'User-Agent': 'Mozilla/5.0'}
        res = mySession.get(url+level,headers=headers)
        if res.status_code==200:
            res = json.loads(str(res.content))
            print "success"
            #do something
        else:
            print "Error",str(res.status_code)
    
    return results
    

    【讨论】:

    • 值得一试。下一步是获取第二个请求的结果,将其保存到磁盘,然后在浏览器中查看错误。希望网页会告诉您出了什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-31
    • 1970-01-01
    • 2022-10-24
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多