最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

requests庫發(fā)送http請求的示例代碼

 更新時間:2023年12月30日 09:00:43   作者:墨鴉_Cormorant  
這篇文章主要介紹了Python?requests發(fā)送http請求的相關(guān)知識,requests是一個Python的第三方庫,用于發(fā)送HTTP請求,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

概述

requests 是一個 Python 第三方庫,用于發(fā)送 HTTP 請求。它提供了一種簡單和方便的方法來與 Web 服務(wù)進(jìn)行交互,如獲取網(wǎng)頁內(nèi)容、發(fā)送數(shù)據(jù)、處理 Cookie 等。

  • requests 是 用 python 語言編寫的,比 urllib2 模塊更簡潔
  • requests 支持 HTTP 連接保持和連接池,支持使用 cookie 保持會話,支持文件上傳,支持自動響應(yīng)內(nèi)容的編碼,支持國際化的URL 和 POST 數(shù)據(jù)自動編碼。
  • 在 python 內(nèi)置模塊的基礎(chǔ)上進(jìn)行了高度的封裝,從而使得 python 進(jìn)行網(wǎng)絡(luò)請求時,變得人性化,使用 Requests 可以輕而易舉的完成瀏覽器可有的任何操作。
  • requests 會自動實現(xiàn)持久連接 keep-alive

requests常用API

常用方法

  • request() :構(gòu)造一個請求,支持 GET、POST、PUT、DELETE 等方式,返回一個 Response 對象

第一個參數(shù)默認(rèn)為 method,第二個參數(shù)默認(rèn)為 url

  • get() :發(fā)送 Get 請求,返回一個 Response 對象

第一個參數(shù)均默認(rèn)為 url

# 發(fā)送GET請求并獲取響應(yīng)內(nèi)容
response = requests.get("https://www.example.com")
# 發(fā)送帶參數(shù)的GET請求。字典傳遞參數(shù),如果值為None的鍵不會被添加到url中
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get("https://www.example.com", params=params)
  • post() :發(fā)送 Post 請求,返回一個 Response 對象

第一個參數(shù)均默認(rèn)為 url

import requests
import json
# 發(fā)送POST請求并傳遞數(shù)據(jù)
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post("https://www.example.com", data=data)
# 發(fā)送JSON數(shù)據(jù)
headers = {'Content-Type': 'application/json'}
response = requests.post("https://www.example.com", data=json.dumps(data), headers=headers)
  • Session() :獲取會話對象。能夠跨請求保持某些參數(shù)

requests.get() 或 requests.post() 等都是一次性請求,如果需要傳參 cookies 或 headers,則每次請求都需要傳參。

如果使用 session 來發(fā)起請求,session 實例在請求了一個網(wǎng)站后,對方服務(wù)器設(shè)置在本地的 cookie 會自動保存在 session 對象中,下一次再使用 session 請求對方服務(wù)器的時候,會直接帶上前一次的 cookie,從而實現(xiàn)回話保持。

session = requests.Session()  # cookies或者session或者token保存于session對象中
session.auth = ('auth','passwd')
session.headers = {'key':'value'}
response = session.get('url')

方法常用參數(shù)

  • url :請求地址。發(fā)送請求方法的第一個參數(shù)均默認(rèn)為 url
  • data :設(shè)置請求體,格式默認(rèn)為字典
  • params:設(shè)置查詢參數(shù)字典
  • headers:設(shè)置請求體,格式為字典
  • timeout :設(shè)置秒數(shù)超時,僅對于連接有效

一旦超過這個時間還沒獲得響應(yīng)內(nèi)容,就會提示錯誤(需要異常處理)

try:
	res = requests.get(url = 'url',timeout=1)
except exceptions.Timeout as e:
    print(e)
except exceptions.HTTPError as e:
    print(e)
  • cookies :設(shè)置 cookies
  • proxies :設(shè)置訪問代理。通過代理可設(shè)置抓包
proxies = requests.get('url', proxies={'http':'[協(xié)議:]ip1:端口','https':'[協(xié)議:]ip2:端口'})
# 如果代理需要用戶名和密碼,則需要這樣:
proxies = {"http": "http://user:password@ip:端口", }
  • files :設(shè)置文件發(fā)送
files = {'file': open('report.xls', 'rb')}
#files = {'file': ('report.jpg', open('report.xls', 'rb'))}     # 顯式的設(shè)置文件名
r = requests.post('http://m.ctrip.com', files=files)
  • auth :設(shè)置身份驗證
import requests
from requests.auth import HTTPBasicAuth
resp = requests.get('url', auth=HTTPBasicAuth('user', 'passwd'))
#resp = requests.get('url', auth=('user', 'passwd'))    # 簡寫
#resp = requests.get(URL, auth=HTTPDigestAuth('user', 'pass')	# 摘要式身份認(rèn)證

requests.Response常用API

常用屬性:

  • encoding :獲取當(dāng)前的編碼
  • encoding = ‘utf-8’ :設(shè)置編碼
  • text :以 encoding 的編碼解析返回內(nèi)容。字符串方式的響應(yīng)體,會自動根據(jù)響應(yīng)頭部的字符編碼進(jìn)行解碼。
  • content :以字節(jié)形式(二進(jìn)制)返回。字節(jié)方式的響應(yīng)體,會自動解碼 gzip 和 deflate 壓縮。
  • headers :以字典對象存儲服務(wù)器響應(yīng)頭,但是這個字典比較特殊,字典鍵不區(qū)分大小寫,若鍵不存在則返回 None
  • status_code :響應(yīng)狀態(tài)碼
  • raw :返回原始響應(yīng)體,也就是 urllib 的 response 對象,使用 response .raw.read()
  • ok :布爾值,查看 http 請求是否成功(狀態(tài)碼:200)
  • cookies :cookie 信息
  • history :返回重定向信息

注:可以在請求時加上 allow_redirects = false 阻止重定向

特殊方法:

  • json() :Requests 中內(nèi)置的 JSON 解碼器,以 json 形式返回

前提返回的內(nèi)容確保是 json 格式的,不然解析出錯會拋異常

  • raise_for_status() :失敗請求(非 200 響應(yīng))拋出異常

發(fā)送https請求并忽略SSL證書校驗

https和SSL證書介紹

HTTPS(HyperText Transfer Protocol Secure)是一種安全的超文本傳輸協(xié)議,它結(jié)合了 HTTP 協(xié)議和 SSL/TLS 協(xié)議。HTTPS 使用 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)協(xié)議來加密和保護(hù)通信數(shù)據(jù)的傳輸。SSL 和 TLS 用于建立加密連接,保護(hù)數(shù)據(jù)傳輸?shù)陌踩院屯暾浴?/p>

HTTPS 和 SSL 證書的關(guān)系及工作流程:

  • 建立安全連接: 客戶端發(fā)起 HTTPS 請求時,客戶端和服務(wù)器首先建立一個安全連接。
  • 握手過程: 這個連接的建立通過 SSL/TLS 握手過程實現(xiàn)。在這個過程中,服務(wù)器將自己的 SSL 證書發(fā)送給客戶端。
  • 證書驗證: 客戶端收到服務(wù)器的 SSL 證書后,會驗證證書的有效性,包括驗證證書的簽名是否有效,是否過期,是否與請求的域名匹配等。
  • 密鑰交換: 客戶端和服務(wù)器通過 SSL/TLS 握手過程協(xié)商加密算法和密鑰,以建立一個加密通道。
  • 加密通信: 一旦加密通道建立,客戶端和服務(wù)器之間的數(shù)據(jù)傳輸將通過選定的加密算法加密,確保通信的安全性。

SSL 證書在這個過程中起到關(guān)鍵作用,它用于驗證服務(wù)器的身份,并確定加密通道的加密參數(shù)。服務(wù)器的 SSL 證書由受信任的第三方機(jī)構(gòu)(CA)簽發(fā),客戶端通過信任這些 CA 來驗證服務(wù)器的身份。

要實現(xiàn) HTTPS 通信,需要向一個受信任的 CA 申請 SSL 證書,并將其安裝到服務(wù)器上。當(dāng)客戶端通過 HTTPS 請求網(wǎng)站時,它們會驗證服務(wù)器的 SSL 證書,并確保連接是安全的。

requests發(fā)送https請求并忽略SSL證書校驗

在某些情況下,可能需要在使用 requests 發(fā)送 HTTPS 請求時忽略 SSL 證書驗證,例如在測試環(huán)境或自簽名證書的情況下。

可以通過設(shè)置 verify 參數(shù)為 False 來實現(xiàn)忽略 SSL 證書驗證。

注意:

1、即使在使用 requests 發(fā)送請求時將 verify 參數(shù)設(shè)置為 False,仍然會進(jìn)行 SSL/TLS 握手。

verify=False 只是告訴 requests 跳過 SSL 證書驗證,而不會禁止 SSL/TLS 握手過程。

2、SSL/TLS 握手是建立安全連接的關(guān)鍵步驟,它用于協(xié)商加密算法、密鑰交換和建立加密通道。

即使不驗證服務(wù)器的 SSL 證書(使用 verify=False),仍然需要進(jìn)行 SSL/TLS 握手以確保通信的安全性。

3、使用 verify=False 時,SSL/TLS 握手過程會進(jìn)行,但在握手過程中會跳過對服務(wù)器 SSL 證書的驗證。這意味著即使服務(wù)器的證書無效或過期,握手也會繼續(xù)進(jìn)行,但連接可能不安全,因為無法保證正在連接到正確的服務(wù)器。

4、如果想完全跳過 SSL/TLS 握手,而不建立安全連接,可以考慮直接使用普通的 HTTP 連接,而不是 HTTPS。

但這樣會使通信不安全,不推薦在生產(chǎn)環(huán)境中使用。如果需要安全連接,建議使用合法有效的 SSL 證書,并允許 SSL/TLS 握手過程來確保連接的安全性。

[SSL: DH_KEY_TOO_SMALL] dh key too small 報錯:

SSL/TLS 握手過程中可能會出現(xiàn) DH(即 Diffie-Hellman,密鑰交換協(xié)議/算法)密鑰長度過小的問題。這通常是由于使用過小的 DH 密鑰長度或不安全的DH密鑰交換算法導(dǎo)致的。

在新的 SSL/TLS 標(biāo)準(zhǔn)中,強(qiáng)制要求使用安全的密鑰長度和加密算法,以確保通信的安全性。一些舊的、不安全的加密算法或密鑰長度會被標(biāo)記為不安全,因此會導(dǎo)致類似的錯誤。

**解決方案:**在請求中設(shè)置合適的 ciphers 來排除 DH 密鑰長度過小的加密套件。但這并不是安全的解決辦法,因為它會降低通信的安全性。

方式1:使用 ssl_default_context 指定允許的加密算法

import requests
import ssl
url = 'https://example.com'  # 替換為你要請求的 HTTPS URL
# 禁用 SSL 校驗
ssl_context = ssl.create_default_context()
ssl_context.check_hostname = False
ssl_context.verify_mode = ssl.CERT_NONE
# 指定允許的加密算法
ciphers = 'HIGH:!DH:!aNULL'
ssl_context.set_ciphers(ciphers)
# 忽略警告
urllib3.disable_warnings()
# 發(fā)送 HTTPS 請求
response = requests.get(url, verify=ssl_context)

方式2:使用 requests.packages.urllib3 包指定允許的加密算法

可以使用 requests.packages.urllib3 包來處理與 SSL 相關(guān)的功能。在這種情況下,可以使用 DEFAULT_CIPHERS 常量來設(shè)置默認(rèn)的加密算法。

注意:requests.packages.urllib3 靜態(tài)編譯可能會顯示找不到,忽略即可,因為其可能是動態(tài)加載的

import requests
url = 'https://example.com'  # 替換為你要請求的 HTTPS URL
# 設(shè)置默認(rèn)加密算法為 HIGH:!DH:!aNULL。
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += ':HIGH:!DH:!aNULL'
# 忽略警告
requests.packages.urllib3.disable_warnings()
# 發(fā)送 HTTPS 請求
response = requests.get(url, verify=False)

到此這篇關(guān)于requests庫發(fā)送http請求的示例代碼的文章就介紹到這了,更多相關(guān)requests發(fā)送http請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python入門while循環(huán)語句理解學(xué)習(xí)

    python入門while循環(huán)語句理解學(xué)習(xí)

    這篇文章主要介紹了python入門while循環(huán)語句理解學(xué)習(xí),文中附含詳細(xì)圖文示例教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 基于python實現(xiàn)數(shù)組格式參數(shù)加密計算

    基于python實現(xiàn)數(shù)組格式參數(shù)加密計算

    這篇文章主要介紹了基于python實現(xiàn)數(shù)組格式參數(shù)加密計算,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Python實現(xiàn)字符型圖片驗證碼識別完整過程詳解

    Python實現(xiàn)字符型圖片驗證碼識別完整過程詳解

    這篇文章主要介紹了Python實現(xiàn)字符型圖片驗證碼識別完整過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python實現(xiàn)自動玩貪吃蛇程序

    Python實現(xiàn)自動玩貪吃蛇程序

    這篇文章主要介紹了通過Python實現(xiàn)的簡易的自動玩貪吃蛇游戲的小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)一學(xué)
    2022-01-01
  • 基于pandas將類別屬性轉(zhuǎn)化為數(shù)值屬性的方法

    基于pandas將類別屬性轉(zhuǎn)化為數(shù)值屬性的方法

    今天小編就為大家分享一篇基于pandas將類別屬性轉(zhuǎn)化為數(shù)值屬性的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python技巧之實現(xiàn)批量統(tǒng)一圖片格式和尺寸

    Python技巧之實現(xiàn)批量統(tǒng)一圖片格式和尺寸

    大家在工作的時候基本都會接觸到很多的圖片,有時為了不同的工作需求需要修改圖片的尺寸或者大小。本文為大家整理了Python批量轉(zhuǎn)換圖片格式和統(tǒng)一圖片尺寸,希望對大家有所幫助
    2023-05-05
  • python?DataFrame的shift()方法的使用

    python?DataFrame的shift()方法的使用

    在python數(shù)據(jù)分析中,可以使用shift()方法對DataFrame對象的數(shù)據(jù)進(jìn)行位置的前滯、后滯移動,本文主要介紹了python?DataFrame的shift()方法的使用,感興趣的可以了解一下
    2022-03-03
  • 使用PM2+nginx部署python項目的方法示例

    使用PM2+nginx部署python項目的方法示例

    這篇文章主要介紹了使用PM2+nginx部署python項目的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Python利用正則表達(dá)式實現(xiàn)計算器算法思路解析

    Python利用正則表達(dá)式實現(xiàn)計算器算法思路解析

    這篇文章主要介紹了Python利用正則表達(dá)式實現(xiàn)計算器算法思路解析,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-04-04
  • python中argparse模塊及action='store_true'詳解

    python中argparse模塊及action='store_true'詳解

    argparse?是一個用來解析命令行參數(shù)的?Python?庫,它是?Python?標(biāo)準(zhǔn)庫的一部分,這篇文章主要介紹了python中argparse模塊及action=‘store_true‘詳解,需要的朋友可以參考下
    2023-02-02

最新評論

延津县| 儋州市| 雅江县| 富蕴县| 江达县| 平远县| 利津县| 会理县| 武胜县| 乌审旗| 行唐县| 保亭| 富平县| 安岳县| 乃东县| 绩溪县| 新昌县| 会理县| 无为县| 朝阳市| 尖扎县| 镇赉县| 黄大仙区| 辽阳市| 自贡市| 平陆县| 当涂县| 桂平市| 佛学| 合山市| 蛟河市| 淄博市| 临夏市| 柞水县| 灌南县| 吴江市| 桦川县| 扎鲁特旗| 青冈县| 通州区| 昌都县|