'bytes' 对象没有属性 'items'
'bytes' object has no attribute 'items'
在进行 CTF 挑战时,我们被要求在几毫秒内输入某个 'key' 的 MD5 哈希值,因此我正在尝试自动执行任务,例如这在 Python3:
import re
import urllib.request
import urllib.parse
import hashlib
url = 'http://random.page'
page = urllib.request.urlopen(url)
header = {}
header['Set-Cookie'] = page.info()['Set-Cookie']
html = page.read().decode('utf-8')
key = re.search("<h3 align='center'>+.*</h3>", html).group(0)[19:-5]
md5 = hashlib.md5(key.encode()).hexdigest()
data = {'hash':md5}
post_data = urllib.parse.urlencode(data).encode('ascii')
post_header = urllib.parse.urlencode(header).encode('ascii')
request = urllib.request.Request(url, data=post_data, headers=post_header)
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))
我想要与 'key' 相同的会话,因为每次请求都会更改,所以我尝试使用相同的 cookie。但是出现这个错误:
Traceback (most recent call last):
File "MD5.py", line 18, in <module>
request = urllib.request.Request(url, data=post_data, headers=post_header)
File "/usr/lib/python3.7/urllib/request.py", line 334, in __init__
for key, value in headers.items():
AttributeError: 'bytes' object has no attribute 'items'
不要进行 urlencode headers。 urllib.request.Request
期望它是一本字典。
只需按原样传递 headers 即可解决您的问题。
在进行 CTF 挑战时,我们被要求在几毫秒内输入某个 'key' 的 MD5 哈希值,因此我正在尝试自动执行任务,例如这在 Python3:
import re
import urllib.request
import urllib.parse
import hashlib
url = 'http://random.page'
page = urllib.request.urlopen(url)
header = {}
header['Set-Cookie'] = page.info()['Set-Cookie']
html = page.read().decode('utf-8')
key = re.search("<h3 align='center'>+.*</h3>", html).group(0)[19:-5]
md5 = hashlib.md5(key.encode()).hexdigest()
data = {'hash':md5}
post_data = urllib.parse.urlencode(data).encode('ascii')
post_header = urllib.parse.urlencode(header).encode('ascii')
request = urllib.request.Request(url, data=post_data, headers=post_header)
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))
我想要与 'key' 相同的会话,因为每次请求都会更改,所以我尝试使用相同的 cookie。但是出现这个错误:
Traceback (most recent call last):
File "MD5.py", line 18, in <module>
request = urllib.request.Request(url, data=post_data, headers=post_header)
File "/usr/lib/python3.7/urllib/request.py", line 334, in __init__
for key, value in headers.items():
AttributeError: 'bytes' object has no attribute 'items'
不要进行 urlencode headers。 urllib.request.Request
期望它是一本字典。
只需按原样传递 headers 即可解决您的问题。