你的问题是,在使用requests或urllib发送GET请求时,URL参数会被自动编码,但你希望不对参数进行编码直接发送。解决这个问题有两种办法:1. 手动构造URL,不使用库自动编码你可以直接构造完整的URL字符串,而不使用requests或urllib的GET参数设置方法。例如:
url = 'http://127.0.0.1/index.php?p=<?=phpinfo();?>'
requests.get(url)
这样requests就会直接使用你构造的URL字符串发送请求,不会对其进行任何编码。2. 使用params参数,指定编码为Nonerequests和urllib都允许你通过params参数手动设置URL参数与值,并指定其编码方式。例如,requests中:
requests.get('http://127.0.0.1/index.php',
params={'p': '<?=phpinfo();?>'},
encode_params=None)
通过设置encode_params=None,可以指定不对params中的参数与值进行编码。urllib中类似的设置参数为urlfeldandvalues,该参数需为一个list,格式为:
[("urlparam1", "value1"), ("urlparam2", "value2")]
然后在构造Request对象时,设置urlencode=False,例如:
req = urllib.request.Request("http://127.0.0.1/index.php",
urlfeldandvalues,
encode_params=False)
这两种方法都可以解决你的问题,实现在发送GET请求时不对URL参数进行编码。