python 模擬Http請求

先簡單聲明一下http請求中post和get之間一個簡單的區別:

GET請求的數據會附在URL之後(就是把數據放置在HTTP協議頭中),以?分割URL和傳輸數據,參數之間以&相連,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果數據是英文字母/數字,原樣發送,如果是空格,轉換爲+,如果是中文/其他字符,則直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX爲該符號以16進製表示的ASCII。

POST把提交的數據則放置在是HTTP包的包體中。

發送請求模擬:
import requests
payload = {"data": "你好"}
r = requests.post(url,data=payload)
print r.content

而在Django中獲取payload這個參數:
body = request.body
json.dumps(urllib.unquote(vaule),encoding='utf-8',ensure_ascii=False)

傳給request的參數爲中文經過轉碼的,如圖“============start==========”的下一行CHANGE_TYPE的值%E6%96:
這裏寫圖片描述
找了好久才知道解決方案!

至於原理,http://blog.csdn.net/shanliangliuxing/article/details/8112986這篇文章講的不錯!

——————-分割線爲更新——————–
同事突然傳了json數據給我,不傳dict,然後,我發現就不會這麼麻煩了!
傳過來的JSON數據直接進行json.loads(data)就可以使用了。好方法!

後來,我用Django的httpResponse對面傳輸的時候,直接傳了字典,結果同事只是拿到key,不能拿到value。才發現,如果傳dict會很不好。果斷傳json數據了!

總結:在Http各種請求的時候,傳輸的數據最好使用json數據格式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章