Как обрабатывать авторизацию ezproxy для загрузки данных через API? - PullRequest
1 голос
/ 16 июня 2020

У меня есть токен для доступа к скачиванию больших файлов с 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)

1 Ответ

1 голос
/ 07 июля 2020

Я не уверен, предоставляет ли Ezproxy API или SDK способ аутентификации запроса, но я не думаю.

Что вы могли бы сделать, так это предоставить сеанс Ezproxy для вашего запроса , и при этом ваш запрос не будет рассматриваться как несанкционированный, потому что вы проходите действительный сеанс, и, следовательно, ваш запрос будет рассматриваться как действительный.

Обратите внимание, что вы можете получить свой Ezproxy session id из ваши файлы cookie.

enter image description here

And finally, you have to make your request against the URL начальной точки

enter image description here


Otherwise, you can use селен для автоматического заполнения формы входа и получения Ezproxy session id в передать его в запросы.

Надеюсь, вам это поможет!

...