[英]Python Requests Not Encoding Forward Slashes
我正在开发一个需要使用application/x-www-form-urlencoded
内容类型向站点发出请求的工具。 当我从ARC 向 Chrome发出请求时,我得到了预期的响应。 当我使用 Python 3 的请求重现请求时,我得到了一个完全不是我预期的不同响应。
我打开 WireShark 来查找来自 ARC 的请求与来自 Python 脚本的请求之间的差异。 来自 WireShark 的 ARC 请求的 URL 编码表单的内容如下:
TransType=INQ&TransID=RESINQ&ReturnPage=%2Fdmvnet%2Fplate_purchase%2Fs2end.asp&HelpPage=&Choice=A&PltNo=TSPOON&HoldISA=N&HoldSavePltNo=&HoldCallHost=&NumCharsInt=8&CurrentTrans=plate_purchase_reserve&PltType=IGWT&PersonalMsg=Y&Let1=T&Let2=S&Let3=P&Let4=O&Let5=O&Let6=N&Let7=&Let8=
来自 WireShark 的针对 Python 脚本请求的 URL 编码表单的内容如下:
TransType=INQ&TransID=RESINQ&ReturnPage=/dmvnet/plate_purchase/s2end.asp&HelpPage=&Choice=A&PltNo=TSPOON&HoldISA=N&HoldSavePltNo=&HoldCallHost=&NumCharsInt=8&CurrentTrans=plate_purchase_reserve&PltType=IGWT&PersonalMsg=Y&Let1=T&Let2=S&Let3=P&Let4=O&Let5=O&Let6=N&Let7=&Let8=
我看到的(以及差异检查器报告的)这两者之间的唯一区别是ReturnPage
。 在来自 ARC 的请求中,正斜杠被转换为%2F
,而在来自 Python 脚本的请求中,它们保持未编码。 requests
库不应该执行这种编码吗? 当我在 Python 中使用原始字符串时, %2F
本身会被编码( ReturnPage=%252Fdmvnet%252Fplate_purchase%252Fs2end.asp
)。 requests
库中缺少编码在这里是否重要?
我正在使用application/x-www-form-urlencoded
header ...
headers = {
"content-type": "application/x-www-form-urlencoded"
}
body = {
...
}
response = requests.post("myUrlHere", data=body, headers=headers)
使用requests
从 Python 脚本返回的响应如下:
Status Code: 200
Headers: {
'Cache-Control': 'private',
'Content-Type': 'text/html',
'Server': '',
'Set-Cookie': 'WebSessionDataID=20200816233709078125172161292511; path=/, ASPSESSIONIDQERAATBR=ODECNAOABGCGADAJEMCCNIDM; secure; path=/',
'Date': 'Mon, 17 Aug 2020 03: 37: 08 GMT', 'Content-Length': '0'
},
Content: "" (Empty)
预期的响应是 302 Object 已移动,响应标头中提供的请求资源的目的地。
它与正斜杠的编码无关。 根据文档:
默认情况下,请求将对除 HEAD 之外的所有动词执行位置重定向。
这意味着如果接收到 302(找到)(或者,通常是任何 3xx 响应状态代码),请求会自动重定向到接收到的位置。 如果你不想要这个,相同的文档说:
如果您使用 GET、OPTIONS、POST、PUT、PATCH 或 DELETE,您可以使用 allow_redirects 参数禁用重定向处理:
并提供了这个例子:
>>> r = requests.get('http://github.com/', allow_redirects=False)
>>> r.status_code
301
>>> r.history
[]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.