Я пытаюсь загрузить файл, используя следующие запросы
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.
Я очень ценю помощь!
Я надеялся, что с помощью предоставленного кода смогу получить нужные мне данные, однако получаю неавторизованные запросы.
Попробуй это. Здесь я сохранил файл на диск для тестирования, но вы можете адаптировать код.
Дополнительный комментарий: никогда, НИКОГДА не публикуйте учетные данные в Интернете. Здесь информация выглядит не очень конфиденциальной, но если есть пароль, пусть и слабый, то это не просто так, и я не смогу скачать файл.
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 Тогда все в порядке!
Попробуйте использовать что-то вроде selenium, чтобы ввести пароль на веб-страницу.