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

Python實(shí)現(xiàn)文件下載、Cookie以及重定向的方法代碼

 更新時(shí)間:2025年02月02日 15:15:53   作者:易辰君  
本文主要介紹了如何使用 Python 的 requests 模塊進(jìn)行網(wǎng)絡(luò)請(qǐng)求操作,涵蓋了從文件下載、Cookie 處理到重定向與歷史請(qǐng)求等多個(gè)方面,通過(guò)詳細(xì)的示例代碼,展示了如何高效地實(shí)現(xiàn)各種網(wǎng)絡(luò)操作,幫助開(kāi)發(fā)者更輕松地進(jìn)行 HTTP 請(qǐng)求的處理和數(shù)據(jù)管理

前言

本文主要介紹了如何使用 Python 的 requests 模塊進(jìn)行網(wǎng)絡(luò)請(qǐng)求操作,涵蓋了從文件下載、Cookie 處理到重定向與歷史請(qǐng)求等多個(gè)方面。通過(guò)詳細(xì)的示例代碼,展示了如何高效地實(shí)現(xiàn)各種網(wǎng)絡(luò)操作,幫助開(kāi)發(fā)者更輕松地進(jìn)行 HTTP 請(qǐng)求的處理和數(shù)據(jù)管理。

一、下載網(wǎng)絡(luò)文件

(一)基本步驟

使用 requests.get() 方法可以發(fā)送 HTTP GET 請(qǐng)求,從給定的 URL 下載文件。以下是下載文件的典型步驟:

發(fā)送請(qǐng)求 使用 requests.get() 向文件的 URL 發(fā)送請(qǐng)求。

獲取文件內(nèi)容 響應(yīng)對(duì)象的 content 屬性包含文件的二進(jìn)制數(shù)據(jù),可以將其保存到本地文件中。

保存文件 使用 with open() 創(chuàng)建一個(gè)本地文件,將下載的內(nèi)容寫(xiě)入其中。

示例:

import requests

# 要下載的文件的 URL
url = 'https://example.com/sample.pdf'

# 發(fā)送 GET 請(qǐng)求
response = requests.get(url)

# 檢查請(qǐng)求是否成功
if response.status_code == 200:
    # 以二進(jìn)制模式打開(kāi)一個(gè)文件,將文件內(nèi)容寫(xiě)入本地
    with open('sample.pdf', 'wb') as file:
        file.write(response.content)
    print("文件下載成功")
else:
    print(f"文件下載失敗,狀態(tài)碼:{response.status_code}")

(二)分段下載大文件

如果文件比較大,建議使用分段下載方式。通過(guò) iter_content() 方法,可以避免將整個(gè)文件一次性加載到內(nèi)存中,而是逐塊處理數(shù)據(jù),適合大文件下載。

示例:

import requests

# 要下載的文件的 URL
url = 'https://example.com/largefile.zip'

# 發(fā)送 GET 請(qǐng)求,流式獲取文件
response = requests.get(url, stream=True)

# 檢查請(qǐng)求是否成功
if response.status_code == 200:
    # 以二進(jìn)制模式打開(kāi)一個(gè)文件,逐塊寫(xiě)入數(shù)據(jù)
    with open('largefile.zip', 'wb') as file:
        for chunk in response.iter_content(chunk_size=1024):
            if chunk:  # 過(guò)濾掉保持活動(dòng)的空數(shù)據(jù)塊
                file.write(chunk)
    print("大文件下載成功")
else:
    print(f"文件下載失敗,狀態(tài)碼:{response.status_code}")

(三)常見(jiàn)問(wèn)題

常見(jiàn)的問(wèn)題主要有兩個(gè):

1. 超時(shí)設(shè)置:可以使用 timeout 參數(shù)來(lái)避免請(qǐng)求長(zhǎng)時(shí)間掛起。例如:

response = requests.get(url, timeout=10)  # 設(shè)置10秒超時(shí)

2. 錯(cuò)誤處理:建議添加異常處理來(lái)捕獲網(wǎng)絡(luò)錯(cuò)誤。例如:

try:
    response = requests.get(url)
    response.raise_for_status()  # 檢查請(qǐng)求是否成功
except requests.exceptions.RequestException as e:
    print(f"請(qǐng)求失?。簕e}")

二、requests模塊處理Cookie

requests 模塊可以輕松地處理 HTTP 請(qǐng)求中的 Cookies,包括發(fā)送帶有 Cookie 的請(qǐng)求和在響應(yīng)中獲取 Cookie。以下是如何使用 requests 模塊處理 Cookies 的一些常見(jiàn)方法和操作示例。

(一)發(fā)送帶有 Cookies 的請(qǐng)求

在發(fā)送請(qǐng)求時(shí),可以通過(guò) cookies 參數(shù)向服務(wù)器發(fā)送 Cookie。這個(gè)參數(shù)接收一個(gè)字典形式的 Cookie 數(shù)據(jù),其中鍵是 Cookie 名稱,值是 Cookie 的值。

示例:

import requests

# 定義 Cookies
cookies = {
    'session_id': '123456',
    'user': 'john_doe'
}

# 發(fā)送帶有 Cookies 的請(qǐng)求
response = requests.get('https://example.com', cookies=cookies)

# 打印響應(yīng)內(nèi)容
print(response.text)

在這個(gè)示例中,session_id 和 user 是發(fā)送給服務(wù)器的 Cookie。

(二)從響應(yīng)中獲取 Cookies

服務(wù)器在響應(yīng)中也可以返回 Set-Cookie 頭,requests 模塊會(huì)自動(dòng)將這些 Cookie 存儲(chǔ)在 response.cookies 屬性中。

示例:

import requests

# 發(fā)送請(qǐng)求
response = requests.get('https://example.com')

# 獲取響應(yīng)中的 Cookies
cookies = response.cookies

# 遍歷 Cookies
for cookie in cookies:
    print(f"{cookie.name}: {cookie.value}")

response.cookies 是一個(gè) RequestsCookieJar 對(duì)象,類似于字典,可以像訪問(wèn)字典那樣訪問(wèn)特定的 Cookie。

(三)Session 對(duì)象管理 Cookies

使用 requests.Session() 對(duì)象時(shí),Cookies 會(huì)自動(dòng)在不同的請(qǐng)求之間保存和發(fā)送。這在處理需要登錄認(rèn)證的情況時(shí)非常有用,因?yàn)?Session 對(duì)象可以自動(dòng)保持會(huì)話的狀態(tài)。

示例:

import requests

# 創(chuàng)建一個(gè) Session 對(duì)象
session = requests.Session()

# 第一次請(qǐng)求,可能會(huì)設(shè)置 Cookies(例如登錄)
response = session.get('https://example.com/login')

# 在后續(xù)的請(qǐng)求中,Cookies 會(huì)自動(dòng)發(fā)送
response = session.get('https://example.com/dashboard')

# 查看當(dāng)前 Session 中的 Cookies
print(session.cookies)

在這個(gè)示例中,session 對(duì)象會(huì)自動(dòng)管理從響應(yīng)中接收到的 Cookies,并在后續(xù)請(qǐng)求中發(fā)送它們。這樣,可以保持一個(gè)會(huì)話(如登錄后的狀態(tài))。

(四)手動(dòng)設(shè)置和修改 Cookies

如果想手動(dòng)管理 Session 對(duì)象的 Cookies,可以通過(guò) session.cookies.set() 方法來(lái)設(shè)置或修改 Cookies。

示例:

import requests

# 創(chuàng)建一個(gè) Session 對(duì)象
session = requests.Session()

# 設(shè)置一個(gè)新的 Cookie
session.cookies.set('my_cookie', 'cookie_value')

# 發(fā)送請(qǐng)求,并自動(dòng)附帶這個(gè) Cookie
response = session.get('https://example.com')

# 打印響應(yīng)內(nèi)容
print(response.text)

(五)RequestsCookieJar 轉(zhuǎn)換為字典

response.cookies 返回的是一個(gè) RequestsCookieJar 對(duì)象,可以將其轉(zhuǎn)換為一個(gè)普通的字典,便于后續(xù)處理。

示例:

# 將 Cookies 轉(zhuǎn)換為字典
cookies_dict = requests.utils.dict_from_cookiejar(response.cookies)

print(cookies_dict)

(六)字典轉(zhuǎn)換為 RequestsCookieJar

可以將一個(gè)字典轉(zhuǎn)換為 RequestsCookieJar,這樣可以方便地管理 Cookie。

示例:

from requests.cookies import cookiejar_from_dict

# 定義 Cookies 字典
cookies_dict = {'session_id': '123456', 'user': 'john_doe'}

# 將字典轉(zhuǎn)換為 RequestsCookieJar
jar = cookiejar_from_dict(cookies_dict)

# 發(fā)送請(qǐng)求時(shí)使用這個(gè) CookieJar
response = requests.get('https://example.com', cookies=jar)

(七)總結(jié)

發(fā)送 Cookie: 通過(guò) cookies 參數(shù)傳遞字典。

獲取 Cookie: 通過(guò) response.cookies 獲取服務(wù)器返回的 Cookie。

自動(dòng)管理 Cookie: 使用 requests.Session() 可以在多個(gè)請(qǐng)求間自動(dòng)管理 Cookie。

手動(dòng)設(shè)置和修改: 通過(guò) session.cookies.set() 手動(dòng)設(shè)置 Cookies。

轉(zhuǎn)換 CookieJar 和字典: requests.utils.dict_from_cookiejar()requests.cookies.cookiejar_from_dict() 方法可以互相轉(zhuǎn)換。

三、重定向與歷史請(qǐng)求

重定向 和 歷史請(qǐng)求 是常見(jiàn)的網(wǎng)絡(luò)請(qǐng)求處理需求。requests 模塊默認(rèn)會(huì)自動(dòng)處理 HTTP 重定向,并且提供了查看重定向歷史的功能。

(一)重定向的概念

重定向是指服務(wù)器告訴客戶端當(dāng)前請(qǐng)求的資源已經(jīng)移動(dòng)到另一個(gè) URL,客戶端需要訪問(wèn)新的 URL。常見(jiàn)的重定向狀態(tài)碼包括:

301 Moved Permanently: 永久重定向,資源已永久搬遷到新的 URL。

302 Found: 臨時(shí)重定向,資源臨時(shí)搬遷,但客戶端應(yīng)繼續(xù)使用原始 URL。

303 See Other: 告訴客戶端請(qǐng)求的資源可以在另一個(gè) URL 處使用 GET 請(qǐng)求獲取。

307 Temporary Redirect: 請(qǐng)求資源臨時(shí)搬遷,客戶端應(yīng)保留請(qǐng)求方法和數(shù)據(jù)。

308 Permanent Redirect: 類似于 301,但客戶端必須使用相同的請(qǐng)求方法。

(二)自動(dòng)重定向

requests 模塊默認(rèn)會(huì)自動(dòng)處理重定向。如果服務(wù)器返回一個(gè) 3xx 響應(yīng),requests 會(huì)跟隨 Location 頭中的新 URL 進(jìn)行重定向。你可以通過(guò) response.history 查看重定向鏈中的所有請(qǐng)求。

示例:

import requests

# 發(fā)送一個(gè)可能發(fā)生重定向的請(qǐng)求
response = requests.get('http://example.com')

# 打印最終響應(yīng)的 URL
print(f"最終的 URL: {response.url}")

# 檢查重定向歷史
if response.history:
    print("發(fā)生了重定向")
    for resp in response.history:
        print(f"狀態(tài)碼: {resp.status_code}, URL: {resp.url}")
else:
    print("沒(méi)有發(fā)生重定向")

在這個(gè)例子中,response.history 是一個(gè)包含重定向歷史的列表,包含每次重定向的響應(yīng)對(duì)象,最終的響應(yīng)會(huì)保存在 response 中。

(三)禁止重定向

如果不希望自動(dòng)跟隨重定向,可以通過(guò) allow_redirects=False 禁用重定向。在這種情況下,requests 會(huì)返回重定向響應(yīng),但不會(huì)繼續(xù)跟隨。

示例:

import requests

# 禁止自動(dòng)重定向
response = requests.get('http://example.com', allow_redirects=False)

# 查看響應(yīng)狀態(tài)碼和重定向的 URL
print(f"狀態(tài)碼: {response.status_code}")
if response.is_redirect or response.status_code in [301, 302, 303, 307, 308]:
    print(f"重定向的 URL: {response.headers['Location']}")

如果服務(wù)器返回重定向狀態(tài)碼(如 301 或 302),Location 頭部中將包含重定向的新 URL,requests 將返回此信息而不會(huì)自動(dòng)發(fā)起新的請(qǐng)求。

(四)POST 請(qǐng)求的重定向

當(dāng)發(fā)送 POST 請(qǐng)求時(shí),如果遇到 302 或 303 重定向,requests 會(huì)自動(dòng)將方法更改為 GET,以符合 HTTP 規(guī)范。

示例:

import requests

# 發(fā)送一個(gè) POST 請(qǐng)求,并觸發(fā)重定向
response = requests.post('http://example.com/login', data={'username': 'user', 'password': 'pass'})

# 打印重定向后的請(qǐng)求方法
if response.history:
    print(f"重定向后使用的請(qǐng)求方法: {response.request.method}")

在這種情況下,POST 請(qǐng)求可能會(huì)被重定向?yàn)?GET 請(qǐng)求。

(五)重定向鏈和歷史請(qǐng)求

可以通過(guò) response.history 來(lái)查看每一次重定向的狀態(tài)碼和 URL,以跟蹤整個(gè)請(qǐng)求鏈。

示例:

import requests

# 發(fā)送一個(gè)可能發(fā)生多次重定向的請(qǐng)求
response = requests.get('http://example.com')

# 打印重定向鏈中的每個(gè)請(qǐng)求信息
for resp in response.history:
    print(f"狀態(tài)碼: {resp.status_code}, URL: {resp.url}, 請(qǐng)求方法: {resp.request.method}")

(六)限制重定向次數(shù)

requests 模塊默認(rèn)允許最多 30 次重定向。如果需要限制重定向次數(shù),可以通過(guò) max_redirects 參數(shù)來(lái)控制。

示例:

import requests

# 限制最多重定向次數(shù)為 5
response = requests.get('http://example.com', max_redirects=5)

# 查看響應(yīng)狀態(tài)碼
print(f"最終的狀態(tài)碼: {response.status_code}")

如果重定向次數(shù)超過(guò)了設(shè)置的限制,requests 會(huì)拋出 TooManyRedirects 異常。

(七)總結(jié)

自動(dòng)重定向: requests 默認(rèn)會(huì)自動(dòng)處理 3xx 重定向,并可通過(guò) response.history 查看重定向鏈。

禁止重定向: 使用 allow_redirects=False 禁止自動(dòng)重定向。

POST 請(qǐng)求重定向: 如果遇到 302 或 303 狀態(tài)碼,POST 請(qǐng)求會(huì)自動(dòng)轉(zhuǎn)換為 GET 請(qǐng)求。

歷史請(qǐng)求: 通過(guò) response.history 獲取每次重定向的狀態(tài)碼、URL 和請(qǐng)求方法,了解請(qǐng)求過(guò)程。

限制重定向次數(shù): 可以通過(guò) max_redirects 限制最大重定向次數(shù),防止陷入無(wú)限重定向循環(huán)。

四、總結(jié)

通過(guò) requests 模塊,開(kāi)發(fā)者可以輕松實(shí)現(xiàn)文件下載、Cookie 自動(dòng)管理以及處理重定向和歷史請(qǐng)求。本文通過(guò)清晰的步驟和代碼示例,展示了如何處理常見(jiàn)的網(wǎng)絡(luò)請(qǐng)求需求,并提供了應(yīng)對(duì)大文件下載、請(qǐng)求超時(shí)及多次重定向等復(fù)雜場(chǎng)景的解決方案,使網(wǎng)絡(luò)編程變得更加簡(jiǎn)單和高效。

到此這篇關(guān)于Python實(shí)現(xiàn)文件下載、Cookie以及重定向的方法代碼的文章就介紹到這了,更多相關(guān)Python實(shí)現(xiàn)文件下載、Cookie以及重定向內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決jupyter加載文件失敗的問(wèn)題

    解決jupyter加載文件失敗的問(wèn)題

    這篇文章主要介紹了解決jupyter加載文件失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • python將pandas datarame保存為txt文件的實(shí)例

    python將pandas datarame保存為txt文件的實(shí)例

    今天小編就為大家分享一篇python將pandas datarame保存為txt文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • pytorch實(shí)現(xiàn)建立自己的數(shù)據(jù)集(以mnist為例)

    pytorch實(shí)現(xiàn)建立自己的數(shù)據(jù)集(以mnist為例)

    今天小編就為大家分享一篇pytorch實(shí)現(xiàn)建立自己的數(shù)據(jù)集(以mnist為例),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 淺談numpy廣播機(jī)制

    淺談numpy廣播機(jī)制

    本文主要介紹了淺談numpy廣播機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Streamlit+Echarts實(shí)現(xiàn)繪制精美圖表

    Streamlit+Echarts實(shí)現(xiàn)繪制精美圖表

    在數(shù)據(jù)分析和可視化的領(lǐng)域,選擇合適的工具可以讓我們事半功倍,本文主要為大家介紹兩個(gè)工具,Streamlit和ECharts,感興趣的小伙伴可以跟隨小編一起了解下
    2023-09-09
  • python編程簡(jiǎn)單幾行代碼實(shí)現(xiàn)視頻轉(zhuǎn)換Gif示例

    python編程簡(jiǎn)單幾行代碼實(shí)現(xiàn)視頻轉(zhuǎn)換Gif示例

    這篇文章主要為大家介紹了簡(jiǎn)單使用幾行python代碼就可以實(shí)現(xiàn)將視頻轉(zhuǎn)換Gif的示例過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • Python中的ctime()方法使用教程

    Python中的ctime()方法使用教程

    這篇文章主要介紹了Python中的ctime()方法使用教程,是Python入門(mén)學(xué)習(xí)的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Python處理Excel的14個(gè)常用操作總結(jié)

    Python處理Excel的14個(gè)常用操作總結(jié)

    在數(shù)據(jù)處理和分析的領(lǐng)域中,Excel是一種被廣泛使用的工具,然而,通過(guò)Python處理Excel,能夠更好地實(shí)現(xiàn)自動(dòng)化和批量處理,本文為大家整理了14個(gè)Python處理Excel的常用操作,希望對(duì)大家有所幫助
    2023-12-12
  • Python函數(shù)的作用域及內(nèi)置函數(shù)詳解

    Python函數(shù)的作用域及內(nèi)置函數(shù)詳解

    這篇文章主要介紹了python函數(shù)的作用域及內(nèi)置函數(shù)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Python生成8位隨機(jī)字符串的方法分析

    Python生成8位隨機(jī)字符串的方法分析

    這篇文章主要介紹了Python生成8位隨機(jī)字符串的方法,結(jié)合實(shí)例形式對(duì)比分析了2種比較常用的隨機(jī)字符串生成技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12

最新評(píng)論