如何解决Python 3请求和标头顺序
我想以与我写下来的顺序完全相同的顺序对标头进行请求。 但是有了Burp,我发现无论我如何用代码编写它,似乎都可以通过另一种方式单独排序标题。
这是我的标题顺序:
headers = {
'Host': 'localhost','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0','Accept': 'application/json,text/plain,*/*','Accept-Language': 'de-DE','Accept-Encoding': 'gzip,deflate','Content-type': 'application/json','Content-Length': '31','Referer': 'https://localhost','Connection': 'close','Origin': 'https://localhost',}
这是Burp拦截的请求中的顺序:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0
Accept-Encoding: gzip,deflate
Accept: application/json,*/*
Connection: close
Host: localhost
Accept-Language: de-DE
Content-type: application/json
Content-Length: 32
Referer: https://localhost
Origin: https://localhost
版本和操作系统:
Windows 10
python3 --version
Python 3.8.6rc1
pip freeze |findstr requests
requests==2.24.0
解决方法
我发现最好的方法不是请求,而是袜子。请求库中似乎仍然存在问题。我将其注册为github问题。在下面,我添加了有关袜子的代码。也许会帮助某人。
HOST = "XXX.com"
PORT = 443
payload = {"json":"data"}
Length = len(payload.encode())
headers = f"""\
POST / HTTP/1.1\r
Host: XXX.com\r
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0\r
Accept: application/json,text/plain,\r
Accept-Language: de-DE \r
Content-type: application/json \r
Content-Length: {Length} \r
Referer: XXX.com \r
Connection: close \r
Origin: XXX.com \r
\r\n"""
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s_sock = context.wrap_socket(s,server_hostname=HOST)
s_sock.connect((HOST,PORT))
s_sock.send(headers.encode() + json.encode())
while True:
data = s_sock.recv(2048)
if ( len(data) < 1 ) :
print(data.decode())
break
s_sock.close()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。