Как сделать запрос на загрузку файла с помощью Python на портал с логином?

Я пытаюсь загрузить файл, используя следующие запросы

url = 'https://totoro.banrep.gov.co/analytics/saw.dll?Go&ViewID=o%3ago%7er%3areport&Action=Download&SearchID=g8of6g3fbae0jp7va1ru23h9rm&ViewName=compoundView%211&fmapId=I5IMHw&ViewState=d8lnokl6jm050tk65k2v7mq8k6&ItemName=1.2.5.IPC_Serie_variaciones&path=%2fshared%2fSeries%20Estad%c3%adsticas_T%2f1.%20IPC%20base%202018%2f1.2.%20Por%20a%c3%b1o%2f1.2.5.IPC_Serie_variaciones&Format=excel2007&Extension=.xlsx&bNotSaveCommand=true'
username = 'publico'
password = 'publico123'
payload = {'NQUser': username, 'NQPassword': password}
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'}

respuesta = requests.get(url, headers = headers, data = payload)
xls = pd.ExcelFile(BytesIO(respuesta .content))

Однако я получаю сообщение о том, что запросы не авторизованы, и не могу понять, почему имя пользователя и пароль верны. Что я мог сделать в этом случае? Есть ли какие-либо параметры, которые мне нужны?

Примечание. Использование селена для имитации пользователя для меня не вариант, поскольку загрузку мне нужно добавить в функцию Azure.

Я очень ценю помощь!

Я надеялся, что с помощью предоставленного кода смогу получить нужные мне данные, однако получаю неавторизованные запросы.

Попробуйте использовать что-то вроде selenium, чтобы ввести пароль на веб-страницу.

inspectorG4dget 09.04.2024 21:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это. Здесь я сохранил файл на диск для тестирования, но вы можете адаптировать код.

Дополнительный комментарий: никогда, НИКОГДА не публикуйте учетные данные в Интернете. Здесь информация выглядит не очень конфиденциальной, но если есть пароль, пусть и слабый, то это не просто так, и я не смогу скачать файл.

import requests

session_url = "https://totoro.banrep.gov.co/analytics/saw.dll?Logon"
file_url = "https://totoro.banrep.gov.co/analytics/saw.dll?Go&ViewID=o%3ago%7er%3areport&Action=Download&SearchID=g8of6g3fbae0jp7va1ru23h9rm&ViewName=compoundView%211&fmapId=I5IMHw&ViewState=d8lnokl6jm050tk65k2v7mq8k6&ItemName=1.2.5.IPC_Serie_variaciones&path=%2fshared%2fSeries%20Estad%c3%adsticas_T%2f1.%20IPC%20base%202018%2f1.2.%20Por%20a%c3%b1o%2f1.2.5.IPC_Serie_variaciones&Format=excel2007&Extension=.xlsx&bNotSaveCommand=true"
payload = {"NQUser": "publico", "NQPassword": "publico123"}

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"}

session = requests.Session()

login_resp = session.post(session_url, headers=headers, data=payload)
file_resp = session.get(file_url, headers=headers)

with open("file.xlsx", "wb") as f:
    f.write(file_resp.content)

session.close()

Спасибо! Это очень хорошо сработало для того, что мне нужно. Что касается паролей, я поместил их в код, потому что это общедоступные пароли, иначе я бы этого не делал.

Pipe 09.04.2024 23:42

@Pipe Тогда все в порядке!

user24147121 09.04.2024 23:53

Другие вопросы по теме