Python запрашивает объект сессии, не сохраняющий cookie - PullRequest
0 голосов
/ 03 апреля 2020

Я создаю скрипт для входа в старый контроллер питания IoT и включения и выключения розеток. Я могу md5 ha sh учетные данные и отправить их вместе, и сервер принимает мой логин и возвращает cook ie "DLILP C", который должен быть передан со всеми последующими запросами. Я вижу, что запросы получают cook ie в перехвате пакетов Wireshark, и этот ответ выглядит так же, как и в Chrome или Firefox. Однако, когда я проверяю сессию повара ie, она пуста - я получаю <RequestsCookieJar[]>

Время истечения заставляет меня остановиться, но нет способа изменить часы, и Chrome получает тот же ответ и прекрасно с этим справляется. Я в недоумении - я был бы признателен за любую помощь, которую кто-либо может оказать!


serverip = os.environ['POWERSERVERIP'] 
username = os.environ['POWERSERVERUSER']
password = os.environ['POWERSERVERPASS']

session = requests.Session()

challenge = getchallengetext(serverip, session)
login(serverip, username, password, challenge, session)
def login(serverip, username, password, challenge, session):
    saltedString = challenge + username + password + challenge
    md5val = hashlib.md5(saltedString.encode('latin1')).hexdigest()
    url = "http://" + serverip + "/login.tgi"
    payload = "Username=" + username + "&Password=" + md5val
    headers = {
        'Content-Type': "application/x-www-form-urlencoded",
    }
    response = session.post(url, data=payload, headers=headers)
    print(session.cookies)
HTTP/1.0 200 OK
Connection: close
Content-Type: text/html
Cache Control: No-store
Expires: Mon, 06 Jan 1990 00:00:01 GMT
Pragma: no-cache
Set-Cookie: DLILPC="wOFRb1rG6oPNImO"; Version=1; Path=/

<HTML><HEAD>

<META HTTP-EQUIV="refresh" content="0; URL=/index.htm">

</HEAD><BODY></BODY>
</HTML>

Поэтому я продолжал копать и пытался сделать пост с urllib и urllib3. Теперь я вижу строку в коде, но устройство отправляет ее обратно, искаженное с помощью [MissingHeaderBodySeparatorDefect ()]. У меня нет возможности изменить то, что устройство отправляет обратно - есть ли достойный подход, чтобы очистить необработанные данные и извлечь их оттуда?

WARNING:urllib3.connectionpool:Failed to parse headers (url=http://11.22.33.171:80/login.tgi): [MissingHeaderBodySeparatorDefect()], unparsed data: 'Cache Control: No-store\r\nExpires: Mon, 06 Jan 1990 00:00:01 GMT\r\nPragma: no-cache\r\nSet-Cookie: DLILPC="cJbe8GuPzGG3Yy8"; Version=1; Path=/\r\n\r\n'
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 441, in _make_request
    assert_header_parsing(httplib_response.msg)
  File "/usr/local/lib/python3.8/site-packages/urllib3/util/response.py", line 71, in assert_header_parsing
    raise HeaderParsingError(defects=defects, unparsed_data=unparsed_data)
urllib3.exceptions.HeaderParsingError: [MissingHeaderBodySeparatorDefect()], unparsed data: 'Cache Control: No-store\r\nExpires: Mon, 06 Jan 1990 00:00:01 GMT\r\nPragma: no-cache\r\nSet-Cookie: DLILPC="cJbe8GuPzGG3Yy8"; Version=1; Path=/\r\n\r\n'
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/urllib/parse.py", line 906, in urlencode
    raise TypeError
TypeError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "main.py", line 12, in <module>
    login(serverip, username, password, challenge)
  File "/workspaces/PowerControl/pc/powercontrol.py", line 40, in login
    response = urllib.request.Request(url, headers=headers, data=urllib.parse.urlencode(payload), method='POST')
  File "/usr/local/lib/python3.8/urllib/parse.py", line 913, in urlencode
    raise TypeError("not a valid non-string sequence "
  File "/usr/local/lib/python3.8/urllib/parse.py", line 906, in urlencode
    raise TypeError
TypeError: not a valid non-string sequence or mapping object
...