欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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 證書由受信任的第三方機構(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)中,強制要求使用安全的密鑰長度和加密算法,以確保通信的安全性。一些舊的、不安全的加密算法或密鑰長度會被標(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實現(xiàn)圖像處理之PiL依賴庫的案例應(yīng)用詳解

    python實現(xiàn)圖像處理之PiL依賴庫的案例應(yīng)用詳解

    這篇文章主要介紹了python實現(xiàn)圖像處理之PiL依賴庫的案例應(yīng)用詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Python如何從列表中刪除相鄰和不相鄰的相同元素

    Python如何從列表中刪除相鄰和不相鄰的相同元素

    這篇文章主要介紹了Python如何從列表中刪除相鄰和不相鄰的相同元素問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python爬蟲面試寶典(常見問題)

    python爬蟲面試寶典(常見問題)

    這篇文章主要介紹了python爬蟲面試寶典及常見問題小結(jié),需要的朋友可以參考下
    2018-03-03
  • 使用Python的time庫格式化時間的方法

    使用Python的time庫格式化時間的方法

    通過使用Python的time庫,我們可以方便地進(jìn)行時間處理、格式化、解析和計算等操作,本文介紹了time庫的一些常見功能和使用方法,包括格式化時間、解析時間戳、獲取當(dāng)前時間、計算時間差等,感興趣的朋友一起看看吧
    2023-11-11
  • Python基于更相減損術(shù)實現(xiàn)求解最大公約數(shù)的方法

    Python基于更相減損術(shù)實現(xiàn)求解最大公約數(shù)的方法

    這篇文章主要介紹了Python基于更相減損術(shù)實現(xiàn)求解最大公約數(shù)的方法,簡單說明了更相減損術(shù)的概念、原理并結(jié)合Python實例形式分析了基于更相減損術(shù)實現(xiàn)求解最大公約數(shù)的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-04-04
  • Python實現(xiàn)打印實心和空心菱形

    Python實現(xiàn)打印實心和空心菱形

    今天小編就為大家分享一篇Python實現(xiàn)打印實心和空心菱形,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • python中MethodType方法介紹與使用示例

    python中MethodType方法介紹與使用示例

    這篇文章主要給大家介紹了關(guān)于python中MethodType方法的相關(guān)資料,文中通過示例代碼給大家介紹的非常詳細(xì),并給出了詳細(xì)的注釋供大家理解學(xué)習(xí),需要的朋友可以參考借鑒,下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • Python根據(jù)給定模型進(jìn)行特征權(quán)值計算

    Python根據(jù)給定模型進(jìn)行特征權(quán)值計算

    在機器學(xué)習(xí)中,特征權(quán)重的計算是理解模型如何做出預(yù)測的重要步驟,本文將詳細(xì)介紹如何使用Python根據(jù)給定模型計算特征權(quán)重,希望對大家有一定的幫助
    2024-11-11
  • python實現(xiàn)文本文件合并

    python實現(xiàn)文本文件合并

    本文給大家匯總介紹了3種合并文本文件的方法,程序的實現(xiàn)思路都非常不錯,這里推薦給大家,有需要的小伙伴可以參考下。
    2015-12-12
  • 詳解matplotlib中pyplot和面向?qū)ο髢煞N繪圖模式之間的關(guān)系

    詳解matplotlib中pyplot和面向?qū)ο髢煞N繪圖模式之間的關(guān)系

    這篇文章主要介紹了詳解matplotlib中pyplot和面向?qū)ο髢煞N繪圖模式之間的關(guān)系,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論