如何在 Python 中给请求设置用户代理 User-Agent

news2024/12/26 3:04:29

文章目录

    • 了解 HTTP 标头的工作原理
    • 在 Python 中获取用户代理数据
    • 在 Python 中使用请求设置用户代理值
      • 在 Python 中为请求版本 2.12 设置用户代理请求
      • 在 Python 中为请求版本 2.13 设置用户代理请求


本文介绍 HTTP 标头用户代理主题以及如何使用 Python 中的请求设置用户代理。 您将了解 HTTP 标头及其在理解用户代理、获取用户代理以及学习使用 Python 中的请求设置用户代理的多种方法方面的重要性。


了解 HTTP 标头的工作原理

每个 HTTP 请求和响应都包含一系列称为 HTTP 标头字段的字符串,由客户端应用程序和服务器发送和接收。 HTTP 标头允许将额外信息传输到服务器并让服务器发回该信息。

使用标头可以实现诸如在使用 API 时对自己进行身份验证或传达有关应用程序期望的信息类型的请求之类的事情。

让我们看一些 HTTP 标头的示例:

  1. Cache-Control:Cache-Control general-header 字段表示所有缓存系统必须遵循的指令。 HTTP 客户端或服务器可以使用 Cache-Control 通用标头来定义缓存参数或对特定类型的文档发出特定的缓存请求。

    提供了以逗号分隔的缓存指令列表。 例如:

Cache-Control : cache-request-directive|cache-response-directive
# OR
Cache-control: no-cache
  1. Date :无一例外,每个 HTTP 日期/时间戳都应始终以格林威治标准时间 (GMT) 表示。 HTTP 应用程序可以使用以下三种日期/时间戳表示形式中的任何一种:
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 :它返回诸如浏览器版本和发送请求的计算机的系统操作系统等信息。 这是本文将特别关注的标题,说明如何使用请求设置用户代理。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6LX83LDp-1686048711708)(/uploads/allimg/230602/1-230602103244360.png)]

这些标头的大小写无关紧要,因为这些标头不区分大小写,因此短语 User-Agent 也可以写为 user-agent。

让我们看一个如何从 URL 打印标头的示例。 该程序向目标 URL 发送请求,从中获取所有标头,然后打印它们。

import requests

url = 'http://www.tutorialspoint.com/python'

headers = requests.get(url).headers
print(headers)

代码的第一行导入 Python 库包 requests。 创建一个对象变量 url,它存储请求应发送到的网站的 URL。

在变量 headers 中,request.get() 函数用于从 url 中获取标头,然后保存在变量中。 最后,打印可变标题。

这会打印给定 URL 的整个标题字典。

输出:

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 中获取用户代理数据

我们已经了解了如何使用 Python 获取整个标题字典。 在学习如何使用请求设置用户代理之前,了解本节很重要。

本节说明一个重要的接合点,它专门在 URL 的所有标头中调用用户代理并显示它。

由于用户代理返回浏览器和系统操作系统的数据,这在很大程度上取决于使用什么方法访问网站。 例如,网站 http://httpbin.org/user-agent 在使用不同的浏览器访问时会返回特定的用户代理数据。

当使用 Firefox 访问此 URL 时,用户代理设置为:

使用 Google Chrome 时,用户代理会根据它更改:

但是,当执行使用请求函数的 Python 脚本来获取用户代理时,URL 会返回请求的版本。

在下面的程序中,requests 函数用于获取显示与浏览器不同的结果的用户代理数据:

import requests

r = requests.get('http://httpbin.org/user-agent')

data = r.json()
print(data['user-agent'])

该 URL 返回所使用的 Python 脚本的请求版本。

输出:

C:\python38\python.exe "C:/Users/Win 10/main.py"
python-requests/2.28.1

Process finished with exit code 0

在 Python 中使用请求设置用户代理值

本节将解释如何在 Python 中使用请求添加自定义标头和设置用户代理。 本节介绍四种使用请求设置用户代理的不同方法。

在 Python 中为请求版本 2.12 设置用户代理请求

如果系统运行的python版本运行requests 2.12或更老的版本,那么应该遵循这个方法:

第一个程序展示了如何获取默认标头,然后专门更新它以使用请求设置用户代理。

导入请求库包并在对象变量中设置 URL。 在可变标头中,存储库包请求将使用的默认标头的副本。

将默认标头替换为预期的自定义标头。 因为请求的源代码对默认标头有一个独特的 CaseInsensitiveDict 实现,所以字典变得不区分大小写。

创建一个变量响应,它以获取请求的 URL 为目标并获取 URL 的响应状态。 如果 URL 处于活动状态并正在运行,它会返回代码 - 200,并打印出来。

因为为user-agent设置了自定义的header,所以必须将response里面的数据转换成JSON,这样才能专门访问像user-agent这样的header。

变量响应的 JSON 数据存储在变量数据中。 该程序从数据中搜索用户代理,并打印使用请求的新设置的用户代理。

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.0

Process finished with exit code 0

在 Python 中为请求版本 2.13 设置用户代理请求

较新版本的请求允许通过创建字典直接更新标头。 在此示例中,程序设置了两个标头 - user-agent 和 from。

两者都是得到更新的有效 HTTP 标头。

request.get() 的值保存在变量 response 内部,类似于上一个程序。 要检查 HTTP 标头用户代理是否正确更新,使用函数 default_user_agent(); 此函数从 URL 中获取默认的用户代理值。

在变量 previous-agent 中,使用 requests 函数保存默认的用户代理。 使用语法 previous_agent = requests.utils.default_user_agent(),打印该值。

我们发送的标头由函数 response.request.headers 访问,因此新更新的用户代理标头使用语法 updated_agent = response.request.headers['user-agent'] 保存在变量 updated_agent 中,然后 它被打印出来。

创建一个新变量 all_headers 来检查所有标头,包括更新的标头。 它再次使用 response.request.headers 函数来存储使用请求的标头。

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

另一种使用请求设置用户代理的方法是像浏览器一样发送请求。 在下面的示例中,在标头变量中,用户代理字段使用浏览器类型的数据进行更新。

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.36

Process finished with exit code 0

另一种使用请求设置用户代理的简单方法是使用模块会话,这样就无需重复设置标头。

对象变量会话使用函数 requests.Session() 加载 URL 会话。 它类似于早期程序使用的 get 请求。

新的用户代理标头通过 session.headers.update() 函数更新。

然后,session.get() 函数从 URL 加载标头信息。 最后,打印 session.headers['user-agent']) 语法以使用请求获取设置的用户代理的更新信息。

import requests

session = requests.Session()
session.headers.update({'User-Agent': 'Custom user agent'})

session.get('https://httpbin.org/headers')

print(session.headers['user-agent'])

程序使用请求和会话设置用户代理后,它会打印会话中加载的更新标头。

输出:

C:\python38\python.exe "C:/Users/Win 10/main.py"
Custom user agent

Process finished with exit code 0

这篇文章已经彻底解释了如何使用请求设置用户代理以及如何获取它们。 阅读完本文后,读者可以轻松地在 Python 中使用 requests 设置 user-agent。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python实验: tkinker 的实践

一、实验内容 1、登录界面 2、制作菜单栏 3、实现聊天窗口 4、访问本地一张照片并展示 二、实验过程 1、 import tkinter as tk import tkinter.messagebox import pickleroot tkinter.Tk() root.geometry(400x300) root.title("武理工欢迎你&#xff01;")# 画布…

2023-6-11-第二式抽象工厂模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

【macbookpro】重装ventura系统

intel 的cpu 的macbook pro 13寸定制版本。 大神们遇到的问题很专业 格式化 mac数据恢复 更新软件 通过“macOS 恢复”重新安装 macOS 大神们说固件是因为时间不对&#xff0c;从美国服务器下载的 打开日志,我看了下我的时间也不对 好像至少要下载2个文件&#xff0c;一…

MATLAB涡度通量数据处理实践技术应用

基于MATLAB语言、以实践案例为主&#xff0c;提供代码、原理与操作结合 1、以涡度通量塔的高频观测数据为例&#xff1a;基于MATLAB开展上机操作 2、涡度通量观测基本概况&#xff1a;观测技术方法、数据获取与预处理等 3、涡度通量数据质量控制&#xff1a;通量数据异常值识…

EPICS boRecord驱动程序编写和使用示例

以下示例程序将展示如何使用gpio的动态链接库编写一个boRecord的驱动程序&#xff0c;并且展示如何使用这个程序&#xff0c;控制一个LED灯的亮灭。 1&#xff09; 新建这个示例程序的顶层目录&#xff0c;并且用makeBaseApp.pl在新建目录中构建这个IOC程序程序框架&#xff1…

前端项目安全扫描出来的漏洞——解决过程

为什么要升级&#xff0c;如图云桌面&#xff08;相当于堡垒机-远程桌面&#xff09;的项目审查是大概基于node16版本进行扫描的&#xff0c;本来我方是通过降版本从14到12绕过大范围更新&#xff0c;但现在躲得过初一躲不过十五&#xff0c;如何更新 package-lock.json 中的一…

HummerRisk获中国开源创新大赛优秀奖

日前&#xff0c;2022中国开源创新大赛落下帷幕&#xff0c;最终HummerRisk 荣获优秀奖。 5月31日&#xff0c;2022中国互联网发展创新与投资大赛暨2022年中国开源创新大赛在京落下帷幕。大赛由中央网信办信息化发展局指导&#xff0c;中国互联网发展基金会、中国网络空间研究院…

聚观早报 |特斯拉11天涨2000亿美元;三星正开发自有大型语言模型

今日要闻&#xff1a;特斯拉11天涨2000亿美元&#xff1b;三星正开发自有大型语言模型&#xff1b;苹果史上最贵新品遇冷&#xff1b;抖音外卖终止1000亿元GMV目标&#xff1b;12306试行在线选铺服务 特斯拉11天涨2000亿美元 特斯拉在 11 天的时间里市值增加了超过 2000 亿美元…

windows 服务程序和桌面程序集成(三)UDP监控工具

系列文章目录链接&#xff1a; windows 服务程序和桌面程序集成&#xff08;一&#xff09;概念介绍windows 服务程序和桌面程序集成&#xff08;二&#xff09;服务程序windows 服务程序和桌面程序集成&#xff08;三&#xff09;UDP监控工具windows 服务程序和桌面程序集成&…

基本线性分组码与性能参数及差错控制

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 基本线性分组码与性…

DAY 73 rsync远程同步

rsync介绍 rsync简介 rsync&#xff08;Remote Sync&#xff0c;远程同步&#xff09;是一个开源的快速备份工具&#xff0c;可以在不同主机之间镜像同步整个目录树&#xff0c;支持增量备份&#xff0c;并保持链接和权限&#xff0c;且采用优化的同步算法&#xff0c;传输前…

回调函数排序异常原因

回调函数排序异常原因 问题所在解决方案 参考我的这篇博文c回调函数排序:回调函数 我之前的代码是这样写的:&#xff08;存在问题&#xff09; 问题所在 将数组传递到其他函数中&#xff0c;再使用sizeof(数组名)&#xff0c;得到的不是数组的完成长度了(往往会短一些) 解决…

美团、抖音“卷”向本地生活B端

配图来自Canva可画 当美团与大众点评的合并案落下帷幕&#xff0c;美团在本地生活领域的江湖地位就算是基本奠定了。只不过&#xff0c;随着互联网技术的不断发展和创新&#xff0c;本地生活服务又被提供了更多的可能性和新机遇。因此&#xff0c;尽管美团严防死守&#xff0c…

花青素-肠道微生物群-健康轴

谷禾健康 花青素-肠道微生物群-健康轴 经常听到一些专家在介绍食品或保健品时说富含花青素&#xff0c;那么究竟什么是花青素&#xff1f;对我们的健康又有何益处&#xff1f; 花青素是在植物组织中发现的天然水溶性色素&#xff0c;水果、蔬菜、花卉中的呈色物质大部分与之有关…

vue项目中使用html2canvas解决截图不全的问题

话不多说&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; <div><el-button click"downloadPicture">下载</el-button><div ref"imageDom"><el-table:data"tableData"style"width: 100%":row…

喜讯 | 华秋电子荣获证券时报年度高成长企业

6月9日&#xff0c;由证券时报社主办的第十一届中国创业投资论坛盛大开启&#xff0c;在论坛上&#xff0c;2023证券时报创投金鹰奖暨创业企业新苗奖评选隆重揭晓。 经过两个多月紧张的申报、投票、评选&#xff0c;近300家机构和企业的激烈比拼&#xff0c;最终一批独具韧劲、…

【React】React中编写CSS,Redux,RTX

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 React中编写CSS内联样式普通csscss modulescss in js动态添加class ReduxJS纯函数如何创建redux…

中国联通泛终端技术生态创新成果发布,移远通信荣获业务与应用板块突出贡献奖

6月7日&#xff0c;以“轻联万物 共赴星海”为主题的2023中国联通泛终端技术生态创新成果发布会在北京举行。 会上&#xff0c;中国联通泛终端技术生态创新联合实验室对一年来作出突出贡献的单位进行了嘉奖。移远通信凭借其在物联网产品及应用解决方案等领域的深厚积累和突出贡…

KubeSphere 社区双周报 | OpenFunction 发布 v1.1.0 | 2023.5.26-6.8

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.05.26-2023.…

将本地项目推到gitee上

查看原来仓库地址 git remote -v删除原来仓库地址 git remote rm origin # git remote rm origin https://gitee.com/zhangxiaoQ/large-file-upload.git添加需要推送的仓库 git remote add origin https://gitee.com/stevencmu/large-file-upload.git