關於requests的urlencode問題


眾所周知,requests會對請求自動地進行urlencode,但這個自動進行的urlencode其實有很多不盡人意的地方:

1.有時候,我們的data是已經urlencode過了的data,盡管我們不希望它進行urlencode,但它仍然會再urlencode一次,導致data面目全非;

2.有時候,我們雖然希望urlencode但對編碼的字符集有要求,但它卻無法做到,而且會用默認的urlencode,使得data換了面貌。

 

requests中urlencode的大概規則:

對於get請求,requests會自動判斷參數是否已經進行過urlencode

對於post請求,如果data為字典形式,則會自動強制進行urlencode(不管參數是否已經經過urlencode)如果data為字符串形式,則會自動判斷參數是否經過urlencode,但如果要這樣使用的話則需要加上header{'Content-Type': 'application/x-www-form-urlencoded'}

 

所以對於問題一:

我們只需要在使用post請求時,把字典形式的參數轉化成字符串並加上headers就可以解決了

headers={'Content-Type': 'application/x-www-form-urlencoded'}

'''
data={'a':'%E5%BE%B7%E7%8E%9B%E8%A5%BF%E4%BA%9A','b':'123'} => data="a=%E5%BE%B7%E7%8E%9B%E8%A5%BF%E4%BA%9A&b=123" '''

 

而對於問題二:

則需要先把data轉化為所需字符編碼的urlencode再加上headers即可

from urllib.parse import urlencode
import requests

headers={'Content-Type': 'application/x-www-form-urlencoded'}
data={'a':'德瑪西亞','b':'132'}
data
=urlencode(data,encoding='gb2312')

r
=requests.post(url,headers=headers,data=data)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM