如何让requests不做urlencode

2018-09-11  本文已影响351人  小温侯

今天遇到一个很蛋疼的事情,在爬某个网站的时候它的访问参数中带有sign字段,靠着9分运气1分实力终于找到了sign的计算方法,但是还是访问不成功。

最后实在没办法,去抓了个包和正常时候访问的包比对了一下,发现关键词被做了两次urlencode。

因为这个是个搜索页面,一般当搜索关键词是中文或者某些特殊字符,同时又使用了params作为requests.get的参数时,requests会对其进行一次urlencode。这里出问题的原因是在计算sign时用了urlencode之后的关键词,因此才会有urlecode两次的情况出现。

于是我去查了一下,如果在requests.get的不进行urlencode操作。其实requests.post也有类似的问题,官网中所述的解决方法是用字符串代替字典来作为payload的值;回到requests.get,有几种方法:

query_string = '&'.join(["{}={}".format(k, v) for k, v in params.items()])
url = "old_url?{}".format(query_string)
rep = requests.get(url)
上一篇下一篇

猜你喜欢

热点阅读