【python】requests模塊初探(一)

来源:https://www.cnblogs.com/flowertester/archive/2019/09/24/11581892.html
-Advertisement-
Play Games

一、寫在前面 Requests 是用Python語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語為中心開發的,所以它比 ...


一、寫在前面


Requests 是用Python語言編寫,基於 urllib,採用 Apache2 Licensed 開源協議的 HTTP 庫。它比 urllib 更加方便,可以節約我們大量的工作,完全滿足 HTTP 測試需求。Requests 的哲學是以 PEP 20 的習語為中心開發的,所以它比 urllib 更加 Pythoner。

那麼,requests都有哪些應用場景呢?

1.伺服器編程基礎;

2.爬蟲利器;

3.自動化介面測試;

4.運維監控腳本

等等

本篇,我就記錄一下requests最常用的兩個請求方式和以及響應,其他內容後續更新


二、安裝

安裝很簡單,只需要使用命令行安裝即可:

pip install requests

三、請求

3.1 GET請求

r = requests.get('https://api.github.com/events')

3.2 傳遞URL參數的GET請求

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)

3.3 請求cookies

url = 'http://httpbin.org/cookies'
cookies = dict(cookies_are='working')
r = requests.get(url, cookies=cookies)
#後面用到再詳細分析

3.4 POST請求

通常,想要發送一些編碼為表單形式的數據——非常像一個 HTML 表單。要實現這個,只需簡單地傳遞一個字典給 data 參數。你的數據字典在發出請求時會自動編碼為表單形式:

payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("http://httpbin.org/post", data=payload)

還可以為 data 參數傳入一個元組列表。在表單中多個元素使用同一 key 的時候,這種方式尤其有效:

payload = (('key1', 'value1'), ('key1', 'value2'))
r = requests.post('http://httpbin.org/post', data=payload)

很多時候你想要發送的數據並非編碼為表單形式的,例如你要傳遞一個 string 而不是一個 dict:

import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
r = requests.post(url, data=json.dumps(payload))

或者是定義一個字元串的data

url = 'https://api.github.com/some/endpoint'
payload = '{"some": "data"}'
r = requests.post(url, data=payload)

此處除了可以自行對 dict 進行編碼,你還可以使用 json 參數直接傳遞,然後它就會被自動編碼

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
r = requests.post(url, json=payload)

四、請求頭

如果想為請求添加 HTTP 頭部,只要簡單地傳遞一個 dict 給 headers 參數就可以了。

url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)

五、響應

前面的請求例子中,每個請求都會賦值給一個名為 r 的 Response 對象,我們可以從這個對象中獲取所有我們想要的信息

5.1獲得請求url

payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('http://httpbin.org/get', params=payload)
print(r.url)
>>> http://httpbin.org/get?key1=value1&key2=value2&key2=value3

5.2獲得響應內容

r = requests.get('https://api.github.com/events')
r.text #獲得響應內容,類型為字元串
r.json() #如果 JSON 解碼失敗, r.json() 就會拋出一個異常
r.content #獲得響應內容,類型為bytes-二進位響應內容
r.raw #原始響應內容,在罕見的情況下,你可能想獲取來自伺服器的原始套接字響應(後面會詳細結合流數據來分析)

5.3響應狀態碼

r = requests.get('http://httpbin.org/get')
r.status_code

如果發送了一個錯誤請求(一個 4XX 客戶端錯誤,或者 5XX 伺服器錯誤響應),我們可以通過 Response.raise_for_status() 來拋出異常:

r = requests.get('http://httpbin.org/status/404')
r.status_code
>>> 404
r.raise_for_status()
>>>
Traceback (most recent call last):
  File "requests/models.py", line 832, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error

5.4響應頭

r.headers

5.5 Response對象支持的所有方法

r.xxx #在ipython調試中,可以通過tab鍵來查看所有方法

該對象所有方法如下:

apparent_encoding
content
encoding
is_permanent_redirect
iter_lines
next
raw
status_code
close
cookies
headers
is_redirect
json
ok
reason
text
connection
elapsed
history
iter_content
links
raise_for_status
request
url

這裡僅介紹了幾個很常用的響應方法,後面遇到實際問題再展開討論

六、超時

可以告訴 requests 在經過以 timeout 參數設定的秒數時間之後停止等待響應。基本上所有的生產代碼都應該使用這一參數。如果不使用,你的程式可能會永遠失去響應:

requests.get('http://github.com', timeout=0.001)

後記

以上的兩種關於requests庫請求方式及響應方法應該可以處理一些基本問題了,後面會繼續探索requests庫的其他功能。


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

-Advertisement-
Play Games
更多相關文章
  • 一、記憶體分析 代碼:引用可以是局部變數也可以是成員變數 二、對象之間建立關係 二、源碼: D34_husband_and_wife.java 地址: https://github.com/ruigege66/Java/blob/master/D34_husband_and_wife.java​ 2. ...
  • 夢中驚醒 在Tomcat的線程池裡,有這樣一個線程,自打出生後,從來不去幹活兒,有好多次走出線程池“這座大山”去看世界的機會,都被他拱手讓給了弟兄們。弟兄們給他取了個名字叫二師兄。沒錯,好吃懶做,飽了睡,醒了吃。這不,又迷迷糊糊睡著了,還打呼嚕呢。“快起來,起來,幹活去了”,有人在喊他。只見二師兄轉 ...
  • 在上篇文章中 "SpringApplication到底run了什麼(上)" 中,我們分析了下麵這個run方法的前半部分,本篇文章繼續開工 6. 獲取系統屬性 但是這個屬性的作用還真不知道。。 7. 列印banner 8. 根據當前環境創建ApplicationContext 基於咱們的Servlet ...
  • PyCon China 是一年一度的 Python 中國開發者大會,今年上海站國內外大佬雲集,「流暢的 Python」作者、Flask 作者及核心維護者、PyCharm 開發者等等大佬都登臺演講。 ...
  • 今天一個同事問我文件複製的問題,他一個100M的文件複製的指定目錄下竟然成了1G多,嚇我一跳,後來看了他的代碼發現是自己通過位元組流複製的,定義的位元組數組很大,導致複製後目標文件非常大,其實就是空行等一些無效空間。我也是很少用這種方式拷貝問價,大多數用Apache提供的commons-io中的File ...
  • # -*-coding:utf-8-*- # !/usr/bin/env python # Author :vilicute ''' func:對某文件夾下的圖片進行批量裁剪 ''' import os import time from PIL import Image start = time.t... ...
  • 2019-09-24-23:24:24 一.什麼時生成器? 1.生成器的實質就是迭代器 二.生成器的獲取方式 1.通過生成器函數 2.通過各種推導式獲取生成器 3.通過數據轉換獲取生成器 三..案例 四.yield和return的區別 yield是通過分段執行函數,執行了yield不會立即停止函數的 ...
  • 預設情況下Spring Boot使用了內嵌的Tomcat伺服器,項目最終被打成jar包運行,每個jar包可以被看作一個獨立的Web伺服器。 傳統的Web開發,一般會將Web應用打成一個war包,然後將其部署到Web伺服器中運行。 Spring Boot也支持傳統的部署模式。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...