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 ответов!