python學習(二十八)URL編碼和解碼&簽名規則需求練習

來源:互聯網
上載者:User

標籤:elf   AC   end   arc   first   tps   函數   sel   arch   

1、url編碼和url解碼

開啟瀏覽器,輸入"python基礎教程",點擊搜尋後,地址欄會有一長串的類似於 %DFBGN這種 就是url編碼對應的搜尋內容,具體如下:

https://www.so.com/s?q=python%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B&src=srp&fr=360chrome_newtab_search&psid=9fcfb50581a9a0358a7459af7832c302

那麼如何用代碼來進行url編碼和url解碼呢

from urllib import parseurl=‘http://www.baidu.com?query=python基礎教程‘url_str=parse.quote_plus(url)   #url編碼print(url_str)baidu_url=‘https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=06074089_4_pg&wd=python%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B&oq=python%25E5%259F%25BA%25E7%25A1%2580%25E6%2595%2599%25E7%25A8%258B&rsv_pq=bc14fc45000148d3&rsv_t=1cc4H7YnCOtNC5%2FEjW6ufW%2FaB8kLFjbeoWXNaE8ogbhH8tOwWQhoY4bKRcKPQ6XRa2jquQ&rqlang=cn&rsv_enter=0‘print(parse.unquote_plus(baidu_url))   #url解碼

輸出的結果為:

http%3A%2F%2Fwww.baidu.com%3Fquery%3Dpython%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8Bhttps://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=06074089_4_pg&wd=python基礎教程&oq=python%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B&rsv_pq=bc14fc45000148d3&rsv_t=1cc4H7YnCOtNC5/EjW6ufW/aB8kLFjbeoWXNaE8ogbhH8tOwWQhoY4bKRcKPQ6XRa2jquQ&rqlang=cn&rsv_enter=0

解碼後可以看出來搜尋的是python基礎教程

2、簽名規則需求

需求如下:

A、輸入資料:
1、請求資料:
vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0
2:商家編碼:
1697
B、計算規則:
1、將商家編碼(vendorId)1697進行兩次MD5加密得到一個字串 Astr:09B764965CE4E92BED8BD3140E22D5CF
2、將請求資料
vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0
進行urlDecode處理(編碼格式為utf-8)得到一個字串urlDecodeStr:
vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0
3、urlDecodeStr + Astr 拼接得到一個待加密的字串 beforeMD5
vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E009B764965CE4E92BED8BD3140E22D5CF
然後將 beforeMD5字串進行加密得到最終的簽名:
6F811B63B11D92BA4A359E6DC98EEE31

對以上需求進行分解,需要做的步驟如下:

1、請求資料擷取到
2、提取商家編碼
3、將商家編碼進行兩次MD5,得到astr
4、再將請求資料進行一次urldecode,得到url_str
5、astr+url_str進行 md5

接下來按照步驟進行代碼編寫


s = ‘vendorId=1697&posCode=pos006&ip=127.0.0.1&posVersion=2.1.1.1.1&mac=;D4-81-D7-CA-20-29;7C-67-A2-9A-06-05;7C-67-A2-9A-06-06;7C-67-A2-9A-06-09;00-00-00-00-00-0000E0‘

class Sign(object): def __init__(self,req_data): self.req_data=req_data #這寫了self的話,其他函數裡面也可以用self.xx self.get_vendorid() #在get_sign裡面調用或者在此調用都可以 self.get_sign() def md5(self,s): md = hashlib.md5() md.update(s.encode()) return md.hexdigest() def get_vendorid(self): data_dict = {} sub_list = self.req_data.split(‘&‘) # [vendorId=1697,posCode=pos006,ip=127.0.0.1] for i in sub_list: k, v = i.split(‘=‘) data_dict[k] = v self.vendorid= data_dict.get(‘vendorId‘) def get_sign(self): #self.get_vendorid() first=self.md5(self.vendorid) astr=self.md5(first) url_str=parse.quote_plus(self.req_data) self.sign=self.md5(astr+url_str) return self.sign

看這段代碼,首先這個類需要將請求資料作為參數傳入,作為類變數。接下來幾個函數,分別為MD5加密函數,這個在之前已經學習過了。

擷取商家編碼函數:

在擷取商家編碼函數時,先將請求資料根據&符號進行分割,分割後的結果是一個list,分割為:

[vendorId=1697,posCode=pos006,ip=127.0.0.1] (list的值後面還有,就不寫了,主要是找第一個),再對這個list的元素按照=進行分割,

並把分割的結果存到字典裡,這個時候vendorId就是key,1697就是value,然後從字典中取出vendorId的值1697

簽名函數:

把擷取的商家編碼進行兩次MD5加密,得到astr,再將請求的資料進行url編碼,得到url_str,最後將astr+url_str進行MD5,就是需要的簽名

因為建構函式是在執行個體化時就會執行,我們在建構函式裡面就調用擷取商家編碼及簽名函數,那麼在執行個體化後,直接調用sign,就能輸出簽名

abc=Sign(s)print(abc.sign)

當然也還是可以按照之前的方式,調用擷取簽名的函數

abc=Sign(s)print(abc.get_sign())

輸出結果都為:

2e8d260f14fc05a2881470504fb6f9d5

 

python學習(二十八)URL編碼和解碼&簽名規則需求練習

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.