python筆記8:requests模組,pythonrequests
簡介:
requests是python的一個http用戶端庫,跟urlib、urlib2類似,requests模組是基於urlib模組開發的,代碼實現更為簡潔。
模組安裝:
pip install requests ,使用requests模組時直接import requests即可。
簡單使用requests:
http協議的介面,請求方式分為get和post,這2種最為常用。請求參數常用的形式有key-value、json、檔案上傳、介面添加cookies、headers等操作。
get請求-url拼接參數:
import requestsurl = 'http://127.0.0.1:5000/gettest?username=abc'#返回結果類型是字串:{"msg": "pass"}res = requests.get(url).text
也可以使用.json(),返回結果類型是字典 (注:介面請求的傳回值類型 與介面的返回定義類型有關)
#返回結果類型是字典:{'msg': 'pass'}res_dic = requests.get(url).json()
get請求- 請求參數類型是key-value形式:
import requestsurl = 'http://127.0.0.1:5000/gettest'#請傳參類型是 name=xxx&pwd=123456data = {"username": "abc"}#返回結果類型是str:{"msg": "pass"}res = requests.get(url, data).text
也可以使用.json(),返回結果類型是字典 (注:介面請求的傳回值類型 與介面的返回定義類型有關)
#返回結果類型是字典:{"msg": "pass"}res_dic = requests.get(url, data).json()
get請求調用的介面實現如下:
1 import flask 2 from flask import request 3 from flask import jsonify 4 5 server = flask.Flask(__name__) 6 @server.route('/gettest', methods=['get']) 7 def test1(): 8 name = request.values.get('username') 9 if name == 'abc':10 #介面傳回值類型為字典11 res = {"msg": "pass"}12 return jsonify(res)13 else:14 res = {'msg': "fail"}15 return jsonify(res)16 server.run(debug=True)View Codepost請求 - url拼接參數
import requestsimport jsonurl = 'http://127.0.0.1:5000/gettest?username=abc'#返回結果類型是str:{"msg": "pass"}res = requests.post(url).text#可以通過json.loads將字串(json串)轉換為字典類型,方便取值操作res_dic = json.loads(res)
也可以使用.json(),返回結果類型是字典 (注:介面請求的傳回值類型 與介面的返回定義類型有關)
#返回結果類型為字典:{'msg': 'pass'},字典取值操作比較方法res_dic = requests.post(url).json()post請求 - 傳參類型是key-value形式
import requestsimport jsonurl = 'http://127.0.0.1:5000/gettest?username=abc'data = {"username": "abc"}#返回結果類型是str:{"msg": "pass"}res = requests.post(url, data).text#可以通過json.loads將字串(json串)轉換為字典類型,方便取值操作res_dic = json.loads(res)
也可以使用.json(),返回結果類型是字典 (注:介面請求的傳回值類型 與介面的返回定義類型有關)
#返回結果類型為字典:{'msg': 'pass'},字典取值操作比較方法res_dic = requests.post(url, data).json()post請求調用的介面實現如下:
1 import flask 2 from flask import request 3 from flask import jsonify 4 5 server = flask.Flask(__name__) 6 @server.route('/gettest', methods=['post']) 7 def test1(): 8 #request.values.get('xxx') 這種擷取請求參數的方式,可以通過url拼接參數和key-value形式提供者。 9 name = request.values.get('username')10 if name == 'abc':11 #介面傳回值類型為字典12 res = {"msg": "pass"}13 return jsonify(res)14 else:15 res = {'msg': "fail"}16 return jsonify(res)17 server.run(debug=True)View Code post請求- 傳參類型是json
import requestsurl = 'http://127.0.0.1:5000/register'data = { "username": "admin", "pwd": "123456", "c_pwd": "123456"}#json類型傳參,post介面請求時,需要指明下請求參數是json類型,返回結果是字典:{'msg': 'ok'}res = requests.post(url, json=data).json()print(type(res), res) post請求- 傳參類型是json,多層json嵌套
import requestsurl = 'http://127.0.0.1:5000/register'data = { "username": "admin", "pwd": "123456", "c_pwd": "123456", "items": { "id": 1, "age": 18, "sex": "man" }}#json類型傳參,post介面請求時,需要指明下請求參數是json類型,返回結果是字典:{'msg': 'ok'}res = requests.post(url, json=data).json()post請求調用的介面,json傳參,代碼實現如下:
1 import flask 2 from flask import request 3 from flask import jsonify 4 5 server = flask.Flask(__name__) 6 @server.route('/register', methods=['post']) 7 def test1(): 8 #request.json,傳參類型為json,返回結果類型為字典:{'pwd': '123456', 'username': 'asdf', 'c_pwd': '123456'} 9 res_dic = request.json10 username = res_dic.get('username')11 pwd = res_dic.get('pwd')12 c_pwd = res_dic.get('c_pwd')13 if username and pwd and c_pwd:14 if res_dic.get('username') == 'admin':15 if res_dic.get('pwd') == res_dic.get('c_pwd'):16 return jsonify({'msg': "ok"})17 else:18 return jsonify({'msg': "密碼不一致"})19 else:20 return jsonify({'msg': "username不能註冊"})21 server.run(debug=True)View Codepost請求 - 上傳檔案
import requestsurl = 'http://127.0.0.1:5000/upload'#上傳介面請求資料,指定上傳檔案的路徑data = {"file_name": open('E:/python_workspace/base-code/asdf.txt', encoding='utf8')}#post請求,請求參數類型是file,返回結果類型是字典res = requests.post(url, files=data).json()print(type(res), res)post請求調用的上傳介面,代碼實現如下:
1 import flask 2 from flask import request 3 from flask import jsonify 4 import time, os 5 from flask import send_from_directory 6 #上傳檔案介面 7 server = flask.Flask(__name__) 8 @server.route('/upload', methods=['post']) 9 def upload():10 #擷取請求參數,傳參類型是file,返回結果類型是一個對象:<class 'werkzeug.datastructures.FileStorage'> <FileStorage: '建立文字文件.txt' ('text/plain')>11 file = request.files.get('file_name', None)12 #判斷file是否為空白,若為空白則沒有上傳檔案13 if file:14 cur_time = time.strftime('%Y%m%d%H%M%S') #擷取目前時間15 upload_name = file.filename #擷取上傳檔案的名稱16 new_file_name = cur_time+upload_name #給檔案重新命名,防止有重複檔案覆蓋17 # 儲存檔案,指定檔案上傳的路徑18 file.save('E:/python_workspace/base-code/'+new_file_name)19 return jsonify({"code": "ok"})20 else:21 return jsonify({"code": "請上傳檔案"})22 23 if __name__ == '__main__':24 server.run(debug=True)View Codepost請求 - 添加cookies
import requestsurl = 'http://127.0.0.1:5000/set_cookies'data = {"username": "xiaobai", "monkey": "999"}#請求cookie參數cookie = {"token": "123456"}#介面請求,返回結果類型是字典:{'msg': 'ok'}res = requests.post(url, data=data, cookies=cookie).json()print(type(res), res)post請求調用的添加cookie介面,代碼實現如下:
1 import flask 2 from flask import request 3 from flask import jsonify 4 server = flask.Flask(__name__) 5 @server.route('/set_cookies', methods=['post']) 6 def set_cookies(): 7 print('擷取到的cookie:', request.cookies) #{'token': '123456'} 8 print('擷取到的請求資料:', request.values) # CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('monkey', '999'), ('username', 'xiaobai')])]) 9 token = request.cookies.get('token')10 if token:11 return jsonify({"msg": "ok"})12 else:13 return jsonify({"msg": "沒有添加cookie"})14 15 if __name__ == '__main__':16 server.run(debug=True)View Code post請求- 添加headers
import requestsheader_url = 'http://127.0.0.1:5000/set_headers'data = {"username": "123456", "monkey": "666"}#添加header資訊header = {'Content-Type': "application/json"}#介面請求res = requests.post(header_url, data, headers=header).json()
歡迎評論~~~