【问题标题】:How to handle ezproxy authorization to download data through API?如何处理 ezproxy 授权通过 API 下载数据?
【发布时间】:2020-10-06 08:22:29
【问题描述】:

我有一个令牌可以访问从 comtrade 下载大文件。原始网页是http://comtrade.un.org/ 但是我可以通过我的大学图书馆订阅获得高级访问权限。所以,if I want to use the premium features the website automatically redirects me to this page,按下登录按钮后,URL 是https://ezproxy.nu.edu.kz:5588/data/dev/portal/。我正在尝试使用 API(使用请求)发送请求和下载文件。我收到了来自http://comtrade.un.org/ 的回复,但为了下载,我需要使用https://ezproxy.nu.edu.kz:5588/data/dev/portal/。当我尝试下载 urllib.error.HTTPError: HTTP Error 401: Unauthorized 时出现此错误消息。我该如何处理这个问题?

px = 'px=HS&' #classification
freq = 'freq=A&' #annual
type = 'type=C&' #commodity
auth = 'https://comtrade.un.org/api/getUserInfo?token=ZF5TSW8giRQMFHuPmS5JwQLZ5FB%2BNO0NCcjxFQUJADrLzCRDCkG5F0ZPnZTYQWO3MPgj96gZNF7Z9iN8BwscUMYBbXuDVYVDvsTAVNzAJ6FNC2dnN7gtB1rt9qJShAO467zBegHTLwvmlRIBSpjjwg%3D%3D'




with open('reporterAreas.json') as json_file:
    data = json.load(json_file)

ls = data['results']

list_year = [*range(2011, 2021,1)]
for years in list_year:
    print(years)
    ps = 'ps='+ str(years) + '&'
    for item in ls:
        r = item['id']                              #report_country_id
        report_country_txt = item['text']
        if r == 'all':
            req_url = 'r=' + r + '&' + px + ps + type + freq + token
            request = url + req_url
            response = requests.get(request)
            if response.status_code == 200:
                print("Response is OK!")
            data = response.json()[0]
            download_url = dwld_url + data['downloadUri']
            print(download_url)
            filename = str(years) + '_' + report_country_txt + '.zip'
            urllib.request.urlretrieve(url, filename)

【问题讨论】:

    标签: python-3.x api web url request


    【解决方案1】:

    我不确定 Ezproxy 是否提供 API 或 SDK 方式来验证请求,但我不认为。

    您可以做的是为您的请求提供 Ezproxy 会话,这样您的请求将不会被视为未经授权,因为您传递的是有效会话,因此您的请求将被处理作为一个有效的。

    请注意,您可以从 cookie 中检索您的 Ezproxy session id

    最后,您必须向starting point url 提出请求


    否则,您可以使用selenium 自动填写登录表单并检索Ezproxy session id 以将其传递给请求。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 2014-09-03
      • 2014-10-13
      • 1970-01-01
      • 2018-07-21
      相关资源
      最近更新 更多