標籤(空格分隔): requestshtml
- pip install requests
1.導入requests後,用get方法就能直接訪問url地址,如:http://www.cnblogs.com/surewing/,看起來是否是很酷
2.這裏的r也就是response,請求後的返回值,能夠調用response裏的status_code方法查看狀態碼
3.狀態碼200只能說明這個接口訪問的服務器地址是對的,並不能說明功能OK,通常要查看響應的內容,r.text是返回文本信息python
1.再發一個帶參數的get請求,如在博客園找找看:surewing,url地址爲:http://zzk.cnblogs.com/s/blogpost?Keywords=surewing
2.請求參數:Keywords=surewing,能夠以字典的形式傳參:{"Keywords": "surewing"}
3.多個參數格式:{"key1": "value1", "key2": "value2", "key3": "value3"}
git
1.咱們有時候響應的結果若是有亂碼,是須要解碼,在fiddler裏面就是如此的;
2.在代碼裏面,他會的內容會自動解碼的;
3.content會自動解碼 gzip 和deflate壓縮github
1.response的返回內容還有其它更多信息
r.status_code #響應狀態碼
r.content #字節方式的響應體,會自動爲你解碼 gzip 和 deflate 壓縮
r.headersajax
以字典對象存儲服務器響應頭,可是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回Nonejson
r.json() #Requests中內置的JSON解碼器
r.url # 獲取url
r.encoding # 編碼格式
r.cookies # 獲取cookie
r.raw #返回原始響應體
r.text服務器
字符串方式的響應體,會自動根據響應頭部的字符編碼進行解碼cookie
r.raise_for_status() ,#失敗請求(非200響應)拋出異常session
在發post請求的時候,有時候body部分要傳data參數,有時候body部分又要傳json參數,那麼問題來了:到底何時該傳json,何時該傳data?
1.post請求的body一般有四種類型,最多見的就是json格式了,這個仍是很好識別的:工具
2.用抓包工具查看,首先點開Raw去查看body部分,以下圖這種,參數最外面是大括號{ }包起來的,這種已經確診爲json格式了。
3.再一次確認,能夠點開Json這一項查看,點開以後能夠看到這裏的幾組參數是json
2、識別data參數
1.data參數也就是這種格式:key1=value1&key2=value2...這種格式很明顯沒有大括號
點開Raw查看,跟上面的json區別仍是很大的
2.由於這個是非json的,因此點開Json這個菜單是不會有解析的數據的,這種數據在WebForms裏面查看
3.能夠看到這種參數顯示在Body部分,左邊的Name這項就是key值,右邊的Value就是對應的value值,像這種參數轉化從python的字典格式就好了
有些post的請求參數是json格式的,須要導入json模塊處理;
通常常見的接口返回數據也是json格式的,咱們在作判斷時候,每每只須要提取其中幾個關鍵的參數就行,這時候就須要json來解析返回的數據。
1.首先說下爲何要encode,python裏面bool值是True和False,json裏面bool值是true和false,而且區分大小寫,這就尷尬了,明明都是bool值。
在python裏面寫的代碼,傳到json裏,確定識別不了,因此須要把python的代碼通過encode後成爲json可識別的數據類型。
2.舉個簡單例子,下圖中dict類型通過json.dumps()後變成str,True變成了true,False變成了fasle
#!/usr/bin/env python # coding=utf-8 import requests import json payload={'wing':True, "json":False, 'python':'22222345'} print(type(payload)) #轉化爲json格式: data_json = json.dumps(payload) print(type(data_json)) print(data_json)
執行結果:
<class 'dict'> <class 'str'> {"wing": true, "json": false, "python": "22222345"}
1.若是一個例子的結果:{"success":true},咱們其實最想知道的是success這個字段返回的是True仍是False
2.若是以content字節輸出,返回的是一個字符串:{"success":true},這樣獲取後面那個結果就不方便了
3.若是通過json解碼後,返回的就是一個字典:{u'success': True},這樣獲取後面那個結果,就用字典的方式去取值:result2["success"]
2、
1.好比打開快遞網:http://www.kuaidi.com/,搜索某個單號,判斷它的狀態是否是已簽收
2.代碼以下:
#!/usr/bin/env python # coding=utf-8 import requests url = "http://www.kuaidi.com/index-ajaxselectcourierinfo-1202247993797-yunda.html" headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"}# get方法其它加個User-Agent就能夠了 s = requests.session() r = s.get(url, headers=headers,verify=False) result = r.json() data = result["data"]# 獲取data裏面內容 print(data) print(data[0])# 獲取data裏最上面有個 get_result = data[0]['context']# 獲取已簽收狀態 print(get_result) if u"已簽收" in get_result: print("快遞單已簽收成功") else: print("未簽收")
github上常見的一些網站登陸案例參考:
1. 知乎:https://github.com/xchaoinfo/fuck-login/tree/master/001%20zhihu