1
我使用Python請求調用使用API之間URL變化GETPython的請求 - 參數數量爲文本VS PARAMS作爲字典
我使用HMAC和hashlib導致看起來像一個簽名生成的簽名:
4epwTDKhWcIJL6bMM5f2hmBrOoXXIGD9UwX8ErfYzqU%3D
當我使用Requests並將參數指定爲字符串時,API調用成功,因爲簽名按原樣使用並且不會更改。
但是,當我使用請求並將參數指定爲字典時,上面的簽名再次被URL編碼,導致%被編碼爲%25,導致簽名顯示如下(注意%25):
4epwTDKhWcIJL6bMM5f2hmBrOoXXIGD9UwX8ErfYzqU%253D
更多的上下文,這裏是字符串PARAMS:
url = 'https://example.com/API'
payload = '¶meterA=valueA¶meterB=valueB¶meterC=valueC& apikey='+apikey+'&salt='+salt+'&signature='+sig
#payload = {'parameterA': 'valueA', 'parameterB': 'valueB', 'apikey': apikey, 'salt': salt, 'signature': sig}
r = requests.get(url, params=payload)
print r.url
結果的URL:
https://example.com/API&
¶meterA=valueA
¶meterB=valueB
&apikey=0e1026af-40ce-e354-f1f2-72d280ca122
&salt=12345
&signature=4epwTDKhWcIJL6bMM5f2hmBrOoXXIGD9UwX8ErfYzqU%3D
現在,詞典PARAMS:
url = 'https://example.com/API'
payload = {'parameterA': 'valueA', 'parameterB': 'valueB', 'apikey': apikey, 'salt': salt, 'signature': sig}
r = requests.get(url, params=payload)
print r.url
結果的URL:
https://example.com/API
&signature=4epwTDKhWcIJL6bMM5f2hmBrOoXXIGD9UwX8ErfYzqU%253D
&salt=12345
&apikey=0e1026af-40ce-e354-f1f2-72d280ca122
¶meterA=valueA
¶meterB=valueB
注意再次,在簽名%變爲25個%
謝謝!
感謝您的支持!我知道這是一件小事。原來我在生成簽名時進行了URL編碼,這是相當不成熟的。我需要在將來檢查我的演示代碼。我很欣賞這種見解,謝謝! –