401 Unauthorized: доступ запрещен из-за неверных учетных данных с запросами
Я собираюсь отказаться от своего корпоративного сайта. Обычно я обращаюсь к нему через VPN, поэтому мне не нужно каждый раз входить в систему (я даже не могу выйти из системы!). Для этого я использовал библиотеку запросов, но у меня проблемы с аутентификацией.
Я попытался извлечь команду cURL на сетевой панели Chrome:
(Если вы посмотрите на панель, вы увидите Login.do. Я думаю, что, вероятно, на сайте есть автоматический вход для пользователей, подключенных к VPN)
Затем я преобразовал cURL первого GET, подчеркнутого красным, и написал эту функцию:
import requests
def enterWebsite():
cookies = {
'JSESSIONID': 'VscZfvnTbt1YnXFyQ5g245p59dWMWjM2lQX7QGGQrxn7QgwlYMTJ^!1826994054',
}
headers = {
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
'Accept': 'image/avif,image/webp,image/apng,image/*,*/*;q=0.8',
'Accept-Language': 'it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7',
'Origin': 'chrome://new-tab-page',
'Referer': 'http://mare.risorse.enel/',
}
response = requests.get('http://mare.risorse.enel/', headers=headers, cookies=cookies)
return response.text
response = enterWebsite()
Когда я пытаюсь запустить его, код состояния "ответ" всегда 401: Аутентификация отклонена.
Я уже пробовал следующее решение, используя HTTPBasicAuth, вставляя моего пользователя и пароль:
import requests
from requests.auth import HTTPBasicAuth
response = requests.get('http://mare.risorse.enel/', verify=False)
if response.status_code == 401:
response = requests.get('http://mare.risorse.enel/', auth=HTTPBasicAuth('user', 'pass'))
print (response)
Но ничего, я не могу понять.
Это странно, потому что когда я ищу на сайте в своем браузере, я уже вошел в систему: мне не нужно "публиковать" свой пользователь и пароль. Поэтому я не могу понять причину, по которой Python просит меня вставить их, если я подключен к своей VPN...
1 ответ
Боже мой, ребята, я получил это с помощью NtlmAuth:
import requests
from requests_ntlm import HttpNtlmAuth
response = requests.get("http://corporate.website/",auth=HttpNtlmAuth('user','password'))
Наконец я получил 200 ответов!