Python3編碼解碼url


python2和python3對於url的解碼和編碼

某天做爬蟲時遇到一個post請求的參數是編碼過的字符串如下,看不懂,初步判斷可能是url編碼

str = "%7B%22ShoppingToken%22%3A%22NewAirChina%257CCA4173%252C1%252C%252C12-CA989%252C1%252C%252C12%257CY%252CV%252C-Y%252CV%252C%257C0%257C3430%252C1564%252CCAGJ-CA%257CNOR%257C%22%2C%22Eligibility%22%3A%22NOR%22%7D"

對於不了解url編碼,解碼的同學,我簡單解釋一下,也可以參考  http://www.w3school.com.cn/tags/html_ref_urlencode.html

  URL為何要編碼、解碼?

      通常如果一樣東西需要編碼,說明這樣東西並不適合傳輸。原因多種多樣,如Size過大,包含隱私數據。對於Url來說,之所以要進行編碼,是因為Url中有些字符會引起歧義。

      例如,Url參數字符串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分隔,如/s?q=abc&ie=utf-8。如果你的value字符串中包含了=或者&,那么勢必會造成接收Url的服務器解析錯誤,因此必須將引起歧義的&和=符號進行轉義,也就是對其進行編碼。

      又如,Url的編碼格式采用的是ASCII碼,而不是Unicode,這也就是說你不能在Url中包含任何非ASCII字符,例如中文。否則如果客戶端瀏覽器和服務端瀏覽器支持的字符集不同的情況下,中文可能會造成問題。

 

百度了一下python解碼url找到了解決辦法,感謝 https://blog.csdn.net/junli_chen/article/details/50060161

直接把代碼貼過來

#url編碼:
import urllib
url = 'http://test.com/s?wd=哈哈'   #如果此網站編碼是gbk的話,需要進行解碼,從gbk解碼成unicode,再從Unicode編碼編碼為utf-8格式。
url = url.decode('gbk', 'replace')
print urllib.quote(url.encode('utf-8', 'replace'))
#結果: http%3a%2f%2ftest.com%2fs%3fwd%3d%e5%93%88%e5%93%88

#url解碼:
import urllib
encoded_url = 'http%3a%2f%2ftest.com%2fs%3fwd%3d%e5%93%88%e5%93%88'
print urllib.unquote(encoded_url).decode('utf-8', 'replace').encode('gbk', 'replace')  #反過來

使用了python2的語法,我使用的python3,所以改了一下語法,發現還不好使,quote報錯了

查了查資料原來python3中qutoe和unqutoe被放到了urllib.parse中(python2是在urllib中)    

 

下面貼上python3解碼編碼的代碼:

#解碼
from urllib import parse
encoded_url = '%7B%22ShoppingToken%22%3A%22NewAirChina%257CCA4173%252C1%252C%252C12-CA989%252C1%252C%252C12%257CY%252CV%252C-Y%252CV%252C%257C0%257C3430%252C1564%252CCAGJ-CA%257CNOR%257C%22%2C%22Eligibility%22%3A%22NOR%22%7D'
print(parse.unquote(encoded_url)

#編碼
from
urllib import parse url = '{"ShoppingToken":"NewAirChina%7CCA4173%2C1%2C%2C12-CA989%2C1%2C%2C12%7CY%2CV%2C-Y%2CV%2C%7C0%7C3430%2C1564%2CCAGJ-CA%7CNOR%7C","Eligibility":"NOR"}' print(parse.quote(url))

解碼完成發現還有 %&%2之類的沒關系,我們把未解密的字符串拿出來再來一次

python2的代碼可以參考上面,因為我沒裝python2,有興趣的可以自己試一試

 

溫馨提示

  • 如果您對本文有疑問,請在評論部分留言,我會在最短時間回復。
  • 如果本文幫助了您,也請評論關注,作為對我的一份鼓勵。
  • 如果您感覺我寫的有問題,也請批評指正,我會盡量修改。
  • 本文為原創,轉載請注明出處。

 

  

 


免責聲明!

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



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