Python?中給請(qǐng)求設(shè)置用戶代理?User-Agent的方法
本文介紹 HTTP 標(biāo)頭用戶代理主題以及如何使用 Python 中的請(qǐng)求設(shè)置用戶代理。 您將了解 HTTP 標(biāo)頭及其在理解用戶代理、獲取用戶代理以及學(xué)習(xí)使用 Python 中的請(qǐng)求設(shè)置用戶代理的多種方法方面的重要性。
了解 HTTP 標(biāo)頭的工作原理
每個(gè) HTTP 請(qǐng)求和響應(yīng)都包含一系列稱為 HTTP 標(biāo)頭字段的字符串,由客戶端應(yīng)用程序和服務(wù)器發(fā)送和接收。 HTTP 標(biāo)頭允許將額外信息傳輸?shù)椒?wù)器并讓服務(wù)器發(fā)回該信息。
使用標(biāo)頭可以實(shí)現(xiàn)諸如在使用 API 時(shí)對(duì)自己進(jìn)行身份驗(yàn)證或傳達(dá)有關(guān)應(yīng)用程序期望的信息類(lèi)型的請(qǐng)求之類(lèi)的事情。
讓我們看一些 HTTP 標(biāo)頭的示例:
1.Cache-Control
:Cache-Control general-header 字段表示所有緩存系統(tǒng)必須遵循的指令。 HTTP 客戶端或服務(wù)器可以使用 Cache-Control 通用標(biāo)頭來(lái)定義緩存參數(shù)或?qū)μ囟?lèi)型的文檔發(fā)出特定的緩存請(qǐng)求。
提供了以逗號(hào)分隔的緩存指令列表。 例如:
Cache-Control : cache-request-directive|cache-response-directive # OR Cache-control: no-cache
1.Date
:無(wú)一例外,每個(gè) HTTP 日期/時(shí)間戳都應(yīng)始終以格林威治標(biāo)準(zhǔn)時(shí)間 (GMT) 表示。 HTTP 應(yīng)用程序可以使用以下三種日期/時(shí)間戳表示形式中的任何一種:
Sat, 22 Sep 2022 20:22:37 GMT ; RFC 822, updated by RFC 1123 Saturday, 22-Sep-22 20:23:37 GMT ; RFC 850, obsoleted by RFC 1036 Sat Sep 22 20:24:37 2022 ; ANSI C's asctime() format
1.User Agent
:它返回諸如瀏覽器版本和發(fā)送請(qǐng)求的計(jì)算機(jī)的系統(tǒng)操作系統(tǒng)等信息。 這是本文將特別關(guān)注的標(biāo)題,說(shuō)明如何使用請(qǐng)求設(shè)置用戶代理。
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-6LX83LDp-1686048711708)(/uploads/allimg/230602/1-230602103244360.png)]
這些標(biāo)頭的大小寫(xiě)無(wú)關(guān)緊要,因?yàn)檫@些標(biāo)頭不區(qū)分大小寫(xiě),因此短語(yǔ) User-Agent
也可以寫(xiě)為 user-agent。
讓我們看一個(gè)如何從 URL 打印標(biāo)頭的示例。 該程序向目標(biāo) URL 發(fā)送請(qǐng)求,從中獲取所有標(biāo)頭,然后打印它們。
import requests url = 'http://www.tutorialspoint.com/python' headers = requests.get(url).headers print(headers)
代碼的第一行導(dǎo)入 Python 庫(kù)包 requests。 創(chuàng)建一個(gè)對(duì)象變量 url,它存儲(chǔ)請(qǐng)求應(yīng)發(fā)送到的網(wǎng)站的 URL。
在變量 headers 中,request.get() 函數(shù)用于從 url 中獲取標(biāo)頭,然后保存在變量中。 最后,打印可變標(biāo)題。
這會(huì)打印給定 URL 的整個(gè)標(biāo)題字典。
輸出:
C:\python38\python.exe "C:/Users/Win 10/main.py"
{'Content-Encoding': 'gzip', 'Age': '1490828', 'Cache-Control': 'max-age=2592000', 'Content-Type': 'text/html; charset=UTF-8', 'Date': 'Sat, 24 Sep 2022 17:50:06 GMT', 'Expires': 'Mon, 24 Oct 2022 17:50:06 GMT', 'Last-Modified': 'Wed, 07 Sep 2022 11:42:58 GMT', 'Server': 'ECAcc (tir/CD76)', 'Strict-Transport-Security': 'max-age=63072000; includeSubdomains', 'Vary': 'Accept-Encoding', 'X-Cache': 'HIT', 'X-Content-Type-Options': 'nosniff', 'X-Frame-Options': 'SAMEORIGIN', 'X-Version': 'June-1 V2', 'X-XSS-Protection': '1; mode=block', 'Content-Length': '9299'}Process finished with exit code 0
在 Python 中獲取用戶代理數(shù)據(jù)
我們已經(jīng)了解了如何使用 Python 獲取整個(gè)標(biāo)題字典。 在學(xué)習(xí)如何使用請(qǐng)求設(shè)置用戶代理之前,了解本節(jié)很重要。
本節(jié)說(shuō)明一個(gè)重要的接合點(diǎn),它專門(mén)在 URL 的所有標(biāo)頭中調(diào)用用戶代理并顯示它。
由于用戶代理返回瀏覽器和系統(tǒng)操作系統(tǒng)的數(shù)據(jù),這在很大程度上取決于使用什么方法訪問(wèn)網(wǎng)站。 例如,網(wǎng)站 http://httpbin.org/user-agent 在使用不同的瀏覽器訪問(wèn)時(shí)會(huì)返回特定的用戶代理數(shù)據(jù)。
當(dāng)使用 Firefox 訪問(wèn)此 URL 時(shí),用戶代理設(shè)置為:
使用 Google Chrome 時(shí),用戶代理會(huì)根據(jù)它更改:
但是,當(dāng)執(zhí)行使用請(qǐng)求函數(shù)的 Python 腳本來(lái)獲取用戶代理時(shí),URL 會(huì)返回請(qǐng)求的版本。
在下面的程序中,requests 函數(shù)用于獲取顯示與瀏覽器不同的結(jié)果的用戶代理數(shù)據(jù):
import requests r = requests.get('http://httpbin.org/user-agent') data = r.json() print(data['user-agent'])
該 URL 返回所使用的 Python 腳本的請(qǐng)求版本。
輸出:
C:\python38\python.exe "C:/Users/Win 10/main.py"
python-requests/2.28.1Process finished with exit code 0
在 Python 中使用請(qǐng)求設(shè)置用戶代理值
本節(jié)將解釋如何在 Python 中使用請(qǐng)求添加自定義標(biāo)頭和設(shè)置用戶代理。 本節(jié)介紹四種使用請(qǐng)求設(shè)置用戶代理的不同方法。
在 Python 中為請(qǐng)求版本 2.12 設(shè)置用戶代理請(qǐng)求
如果系統(tǒng)運(yùn)行的python版本運(yùn)行requests 2.12或更老的版本,那么應(yīng)該遵循這個(gè)方法:
第一個(gè)程序展示了如何獲取默認(rèn)標(biāo)頭,然后專門(mén)更新它以使用請(qǐng)求設(shè)置用戶代理。
導(dǎo)入請(qǐng)求庫(kù)包并在對(duì)象變量中設(shè)置 URL。 在可變標(biāo)頭中,存儲(chǔ)庫(kù)包請(qǐng)求將使用的默認(rèn)標(biāo)頭的副本。
將默認(rèn)標(biāo)頭替換為預(yù)期的自定義標(biāo)頭。 因?yàn)檎?qǐng)求的源代碼對(duì)默認(rèn)標(biāo)頭有一個(gè)獨(dú)特的 CaseInsensitiveDict 實(shí)現(xiàn),所以字典變得不區(qū)分大小寫(xiě)。
創(chuàng)建一個(gè)變量響應(yīng),它以獲取請(qǐng)求的 URL 為目標(biāo)并獲取 URL 的響應(yīng)狀態(tài)。 如果 URL 處于活動(dòng)狀態(tài)并正在運(yùn)行,它會(huì)返回代碼 - 200,并打印出來(lái)。
因?yàn)闉閡ser-agent設(shè)置了自定義的header,所以必須將response里面的數(shù)據(jù)轉(zhuǎn)換成JSON,這樣才能專門(mén)訪問(wèn)像user-agent這樣的header。
變量響應(yīng)的 JSON 數(shù)據(jù)存儲(chǔ)在變量數(shù)據(jù)中。 該程序從數(shù)據(jù)中搜索用戶代理,并打印使用請(qǐng)求的新設(shè)置的用戶代理。
import requests url = 'http://httpbin.org/user-agent' headers = requests.utils.default_headers() headers.update( { 'User-Agent': 'My User Agent 1.0', } ) response = requests.get(url, headers=headers) print(response) data = response.json() print(data['user-agent'])
輸出:
C:\python38\python.exe "C:/Users/Win 10/main.py"
<Response [200]>
My User Agent 1.0Process finished with exit code 0
在 Python 中為請(qǐng)求版本 2.13 設(shè)置用戶代理請(qǐng)求
較新版本的請(qǐng)求允許通過(guò)創(chuàng)建字典直接更新標(biāo)頭。 在此示例中,程序設(shè)置了兩個(gè)標(biāo)頭 - user-agent 和 from。
兩者都是得到更新的有效 HTTP 標(biāo)頭。
request.get()
的值保存在變量 response 內(nèi)部,類(lèi)似于上一個(gè)程序。 要檢查 HTTP 標(biāo)頭用戶代理是否正確更新,使用函數(shù) default_user_agent();
此函數(shù)從 URL 中獲取默認(rèn)的用戶代理值。
在變量 previous-agent 中,使用 requests 函數(shù)保存默認(rèn)的用戶代理。 使用語(yǔ)法 previous_agent = requests.utils.default_user_agent()
,打印該值。
我們發(fā)送的標(biāo)頭由函數(shù) response.request.headers 訪問(wèn),因此新更新的用戶代理標(biāo)頭使用語(yǔ)法 updated_agent = response.request.headers['user-agent']
保存在變量 updated_agent 中,然后 它被打印出來(lái)。
創(chuàng)建一個(gè)新變量 all_headers 來(lái)檢查所有標(biāo)頭,包括更新的標(biāo)頭。 它再次使用 response.request.headers 函數(shù)來(lái)存儲(chǔ)使用請(qǐng)求的標(biāo)頭。
import requests url = 'https://httpbin.org/get' headers = { 'User-Agent': 'My User Agent 1.0', 'From': 'youremail@domain.example' } response = requests.get(url, headers=headers) print(response) previous_agent = requests.utils.default_user_agent() print("Default user-agent header = ", previous_agent) updated_agent = response.request.headers['user-agent'] print("Updated user-agent header = ", updated_agent) all_headers = response.request.headers print(all_headers)
輸出:
C:\python38\python.exe "C:/Users/Win 10/main.py"
<Response [200]>
Default user-agent header = python-requests/2.28.1
Updated user-agent header = My User Agent 1.0
{'User-Agent': 'My User Agent 1.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'From': 'youremail@domain.example'}Process finished with exit code 0
另一種使用請(qǐng)求設(shè)置用戶代理的方法是像瀏覽器一樣發(fā)送請(qǐng)求。 在下面的示例中,在標(biāo)頭變量中,用戶代理字段使用瀏覽器類(lèi)型的數(shù)據(jù)進(jìn)行更新。
import requests url = 'http://httpbin.org/user-agent' headers = {'User-Agent': 'user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ' 'like Gecko) Chrome/105.0.0.0 Safari/537.36'} response = requests.get(url.strip(), headers=headers, timeout=10) previous_agent = requests.utils.default_user_agent() print("Default user-agent header = ", previous_agent) updated_agent = response.request.headers['user-agent'] print("Updated user-agent header = ", updated_agent)
輸出:
C:\python38\python.exe "C:/Users/Win 10/main.py"
Default user-agent header = python-requests/2.28.1
Updated user-agent header = user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36Process finished with exit code 0
另一種使用請(qǐng)求設(shè)置用戶代理的簡(jiǎn)單方法是使用模塊會(huì)話,這樣就無(wú)需重復(fù)設(shè)置標(biāo)頭。
對(duì)象變量會(huì)話使用函數(shù) requests.Session()
加載 URL 會(huì)話。 它類(lèi)似于早期程序使用的 get 請(qǐng)求。
新的用戶代理標(biāo)頭通過(guò) session.headers.update()
函數(shù)更新。
然后,session.get()
函數(shù)從 URL 加載標(biāo)頭信息。 最后,打印 session.headers['user-agent'])
語(yǔ)法以使用請(qǐng)求獲取設(shè)置的用戶代理的更新信息。
import requests session = requests.Session() session.headers.update({'User-Agent': 'Custom user agent'}) session.get('https://httpbin.org/headers') print(session.headers['user-agent'])
程序使用請(qǐng)求和會(huì)話設(shè)置用戶代理后,它會(huì)打印會(huì)話中加載的更新標(biāo)頭。
輸出:
C:\python38\python.exe "C:/Users/Win 10/main.py"
Custom user agentProcess finished with exit code 0
這篇文章已經(jīng)徹底解釋了如何使用請(qǐng)求設(shè)置用戶代理以及如何獲取它們。 閱讀完本文后,讀者可以輕松地在 Python 中使用 requests 設(shè)置 user-agent。
到此這篇關(guān)于如何在 Python 中給請(qǐng)求設(shè)置用戶代理 User-Agent的文章就介紹到這了,更多相關(guān)Python User-Agent用戶代理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)生命游戲的示例代碼(tkinter版)
生命游戲是由劍橋大學(xué)約翰·何頓·康威設(shè)計(jì)的計(jì)算機(jī)程序,一時(shí)吸引了各行各業(yè)一大批人的興趣。本文將用Python實(shí)現(xiàn)這一游戲,感興趣的可以嘗試一下2022-08-08如何在django里上傳csv文件并進(jìn)行入庫(kù)處理的方法
這篇文章主要介紹了如何在django里上傳csv文件并進(jìn)行入庫(kù)處理的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01簡(jiǎn)單談?wù)凱ython面向?qū)ο蟮南嚓P(guān)知識(shí)
由于馬上就要期末考試了,正在抓緊時(shí)間復(fù)習(xí) 所以這一篇就拖了很久,抱歉啦~ 今天會(huì)說(shuō)說(shuō): 屬性私有,方法私有,重寫(xiě),魔術(shù)方法,需要的朋友可以參考下2021-01-01django Layui界面點(diǎn)擊彈出對(duì)話框并請(qǐng)求邏輯生成分頁(yè)的動(dòng)態(tài)表格實(shí)例
這篇文章主要介紹了django Layui界面點(diǎn)擊彈出對(duì)話框并請(qǐng)求邏輯生成分頁(yè)的動(dòng)態(tài)表格實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05使用pyinstaller打包django的方法實(shí)現(xiàn)
本文主要介紹了使用pyinstaller打包django的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09如何將Pycharm中Terminal使用Powershell作為終端
這篇文章主要介紹了如何將Pycharm中Terminal使用Powershell作為終端問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05transform python環(huán)境快速配置方法
經(jīng)常在數(shù)據(jù)開(kāi)發(fā)中需要搞udf,最近發(fā)現(xiàn)transform更加方便易用,但是經(jīng)常會(huì)涉及到集群python版本不一、包不全或者部分機(jī)器上沒(méi)有安裝python。這篇文章主要介紹了transform python環(huán)境快速配置方法,需要的朋友可以參考下2018-09-09