一、问题
在编写跨站脚本漏洞辅助验证脚本时遇到一个问题,当使用 Requests 模块发起请求,默认会对 URL 进行一次编码,比如下面的代码:
proxy = {"http": "http://127.0.0.1:8080"}
response = requests.get(res, proxies=proxy).text
使用 Burp Suite 抓包可以看到请求 URL 被 URL 编码了一次:
二、原因
request.get 是通过构造 session 模块中的Session类,并调用其request方法完成请求。Session类的request方法先根据传入的参数(如URL等)构造一个Request类,并调用self.prepare_request方法预准备,最后调用self.send发送最终的请求。
URL的编码过程便在self.prepare_request方法中:
# session.py
def prepare_request(self, request):
# 此部分代码已忽略
p = PreparedRequest()
p.prepare(method=request.method.upper(), url=request.url, files=request.files,
data=request.data, json=request.json,
headers=merge_setting(request.headers, self.headers, dict_class=CaseInsen