python筆記8:requests模塊

来源:http://www.cnblogs.com/lhly/archive/2017/07/09/7136900.html
-Advertisement-
Play Games

簡介: 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()

歡迎評論~~~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • NoSQL簡介 介紹Redis前,我想還是先認識下NoSQL,即not only sql, 是一種非關係型的數據存儲,key/value鍵值對存儲。現有Nosql DB 產品: redis/MongoDB/Memcached/Hbase/Cassandra/ Tokyo Cabinet/Voldem ...
  • SQL Server 是Microsoft 公司推出的關係型資料庫管理系統。具有使用方便可伸縮性好與相關軟體集成程度高等優點,可跨越從運行Microsoft Windows 98 的膝上型電腦到運行Microsoft Windows 2012 的大型多處理器的伺服器等多種平臺使用。Microsoft ...
  • [root@localhost ~]# yum install -y mysql-server mysql mysql-devel [root@localhost ~]# service mysqld start mysql> grant all privileges on *.* to 'root ...
  • 一.文件系統概述 1.文件系統是基於操作系統的,用來管理和組織保存在磁碟驅動器上的數據的系統軟體,通過對數據存儲佈局/空間管理/文件命名/安全控制等 方面的管理,解決瞭如何在設備上有效的存儲數據。 2.文件系統是操作系統與磁碟設備之間交互的一個橋梁,通過文件系統實現了數據合理組織和有效存取,表現在操 ...
  • pwd print working directory 列印工作目錄hostname my computer's network name 電腦在網路中的名稱mkdir make directory 創建路徑cd change directory 改變路徑ls list directory 列出路徑... ...
  • 1. 判斷是否是奇數: public static boolean isOdd(int i) { return i %2 != 0 ; } 2. System.out.println(2.0 - 1.1); 輸出:0.89999999 99999999 (Double型的) System.out.p ...
  • 上周 @萍姐 問我如何抓取天貓上麵店鋪的評分,看了下挺簡單的,於是花了點時間寫了個Python腳本,加上web.py做成一個web服務,使用起來還不錯,今天來看的時候發現當時為了方便直接用web.py開發有點簡陋,自己也好久沒用flask寫過東西了,打算用flask再寫一遍,順便複習下舊的知識,如果... ...
  • 近日,自己開始著手從事SDN研發,相關的知識有一大堆,諸如OpenFlow等,不得不說網路的基礎知識是必備的,但是對於新手來說要從茫茫大海一般的知識點中找準方向的確有點困難,因此自己從網上收集了一些具有方嚮導向性的書籍供大家一起參考 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...