1

我有一个令牌可以访问从 comtrade 下载大文件。原始网页是http://comtrade.un.org/但是我可以通过我的大学图书馆订阅获得高级访问权限。所以,如果我想使用高级功能,网站会自动将我重定向到这个页面,按下登录按钮后,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)
4

1 回答 1

0

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

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

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

在此处输入图像描述

最后,您必须针对起点 url提出请求

在此处输入图像描述


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

我希望这可以帮助你!

于 2020-07-07T09:23:54.583 回答