簡介: requests是python的一個http客戶端庫,跟urlib、urlib2類似,requests模塊是基於urlib模塊開發的,代碼實現更為簡潔。 模塊安裝: pip install requests ,使用requests模塊時直接import requests即可。 簡單使用req ...
簡介:
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 requests url = '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 requests url = 'http://127.0.0.1:5000/gettest' #請傳參類型是 name=xxx&pwd=123456 data = {"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 Code
post請求 - url拼接參數
import requests import json url = '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 requests import json url = '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 requests url = '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 requests url = '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.json 10 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 Code
post請求 - 上傳文件
import requests url = '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 Code
post請求 - 添加cookies
import requests url = '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 requests header_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()
歡迎評論~~~