Python requests模块
一、requests模块简介
requests模块是一个第三方模块,需要在python环境中安装:
pip install requests
该模块主要用来发送 HTTP 请求,requests 模块比 urllib 模块更简洁。
requests模块支持:
- 自动处理url编码
- 自动处理post请求参数
- 支持文件上传
- 支持自动响应内容的编码
- 自动实现持久连接keep-alive
- 简化cookie和代理操作等
1、基本步骤
requests模块使用的基本步骤:
# 导入模块
import requests# 目标url
url = 'https://www.baidu.com'# 向目标url发送请求方法。比如:get/post等
response = requests.get(url)# 打印响应内容
print(response.ok) # True
print(response.status_code) # 200
print(response.url) # https://www.baidu.com/
print(response.apparent_encoding) # utf-8
print(response.text)
print(response.content.decode())
2、requests方法
requests的请求方法有:
参数说明:
- method:请求方法。
- url:请求url。
- params:请求url参数。比如:get参数。
- data:请求要发送到指定 url 的字典、元组列表、字节或文件对象等。比如:post参数数据。
- json:请求要发送到指定 url 的 JSON 对象。比如:post参数数据。
- args:请求其他属性参数。比如 cookies、headers、verify、timeout等。
常见 args请求属性如下:
- headers:请求头。
- cookies:请求cookies
- timeout:设置响应超时时间。
- verify:这是本次请求是否进行证书校验。
3、response对象
每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息。响应信息如下:
3.1 response.text和response.content 的区别
(1)response.text
response.text
- 类型:str
- 解码类型: requests模块自动根据HTTP 头部对响应的编码作出有根据的推测,推测的文本编码。
(2)response.content
response.content
- 类型:bytes
- 解码类型: 没有指定
通过对response.content指定decode,来解决中文乱码。
response.content.decode() # 默认utf-8response.content.decode('gbk') # 指定编码
二、get请求
get() 方法可以发送 GET 请求到指定 url,一般格式如下:
response = requests.get(url, params,args)
参数说明:
- url参数:请求 url。
- params:请求参数。比如:get参数。
- args参数:请求其他属性参数,比如 cookies、headers、verify、timeout等。
1、不带参数请求
url = 'https://www.baidu.com'# 不带参数的get请求
response = requests.get(url)
2、带参数请求
2.1 url携带参数
url = 'https://www.baidu.com/?p1=python&p2=java'# url携带参数 get请求
response = requests.get(url)
print(response.url) # https://www.baidu.com/?p1=python&p2=java
2.2 构建字典参数
url = 'https://www.baidu.com'
url_params = {'p1': 'python', 'p2': None, 'p3': 'java'}# url携带字典参数 get请求,如果值为None的键不会被添加到url中
response = requests.get(url, url_params)
print(response.url) # https://www.baidu.com/?p1=python&p3=java
注意:
字典传递参数,如果值为None的键都不会被添加到 url中。
三、post请求
post() 方法可以发送 POST 请求到指定 url,一般格式如下:
response = requests.post(url, data={key: value}, json={key: value}, args)
参数说明:
- url参数:请求 url。
- data参数:请求要发送到指定 url 的字典、元组列表、字节或文件对象等。
- json参数:请求要发送到指定 url 的 JSON 对象。
- args参数:请求其他属性参数,比如 cookies、headers、verify、timeout等。
1、表单参数请求
方式1:
url = 'https://www.baidu.com'
payload = {'key1': 'value1', 'key2': None, 'key3': 'value3'}# 表单参数请求
response = requests.post(url, data=payload)
print(response.url) # https://www.baidu.com/
print(response.request.body) # key1=value1&key3=value3
注意:
如果值为None的键都不会被传递。
方式2:
import requests
import jsonurl = 'https://www.baidu.com'
payload = {'key1': 'value1', 'key2': None, 'key3': 'value3'}
headers = {'content-type': 'application/json'}# 表单参数请求
response = requests.post(url, data=json.dumps(payload), headers=headers)
print(response.url) # https://www.baidu.com/
print(response.request.body) # {"key1": "value1", "key2": null, "key3": "value3"}
print(response.request.headers) # {'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'content-type': 'application/json', 'Content-Length': '50'}
注意:
如果值为None的键都会被传递,值为null。
2、Json参数请求
url = 'https://www.baidu.com'
payload = {"key1": "value1", "key2": None, "key3": "value3", "key3": 33}
headers = {'content-type': 'application/json'}response = requests.post(url, json=payload, headers=headers)
print(response.url) # https://www.baidu.com/
print(response.request.body) # b'{"key1": "value1", "key2": null, "key3": 33}'
print(response.request.headers) # {'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'content-type': 'application/json', 'Content-Length': '44'}
3、添加请求属性参数实例
这里添加请求 timeout,cookies,headers。
url = 'https://www.baidu.com'
payload = {"key1": "value1", "key2": None, "key3": "value3", "key3": 33}
headers = {'content-type': 'application/json'}
cookies = {'testCookies_1': 'Hello_Python3', 'testCookies_2': 'Hello_Java'}try:response = requests.post(url, json=payload, headers=headers, cookies=cookies, timeout=5)if response.status_code != 200: # 如果响应状态码不是 200,就主动抛出异常print('响应失败:status_code = ' + str(response.status_code))print('响应失败:' + str(response.reason))else:print("=====================")print(response.url) # https://www.baidu.com/print(response.request.body) # b'{"key1": "value1", "key2": null, "key3": 33}'print(response.request.headers) # {'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'content-type': 'application/json', 'Cookie': 'testCookies_1=Hello_Python3; testCookies_2=Hello_Java', 'Content-Length': '44'}print(response.request._cookies) # <RequestsCookieJar[<Cookie testCookies_1=Hello_Python3 for />, <Cookie testCookies_2=Hello_Java for />]>
except requests.RequestException as e:print("请求失败,异常信息e={}".format(e))
except:raise
finally:response.close()
四、利用requests.session请求
requests模块中的 Session类能够自动处理发送请求获取响应过程中产生的cookie,进而达到状态保持的目的。
作用及场景:
- 自动处理cookie,即下一次请求会带上前一次的cookie
- 自动处理连续的多次请求过程中产生的cookie
示例代码如下:
import requests# 构造请求头字典
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36','content-type': 'application/json'
}
cookies = {'testCookies_1': 'Hello_Python3','testCookies_2': 'Hello_Java'
}# 构造请求参数字典
data = {'authenticity_token': 'authenticity_token','login': input('输入账号:'),'password': input('输入密码:')
}# 实例化session对象
session = requests.session()# 请求1
post_url = 'https://blog.csdn.net'
response1 = session.post(post_url, data=data, headers=headers, cookies=cookies)print("==========session.post===========")
print(response1.url)
print(response1.request.body)
print(response1.request.headers)
print(response1.request._cookies)
print(response1.cookies)# 请求2
get_url = 'https://blog.csdn.net'
# response2 = session.get(get_url, headers=headers)
response2 = session.get(get_url)print("==========session.get===========")
print(response2.url)
print(response2.request.body)
print(response2.request.headers)
print(response2.request._cookies)
– 求知若饥,虚心若愚。
相关文章:

Python requests模块
一、requests模块简介 requests模块是一个第三方模块,需要在python环境中安装: pip install requests 该模块主要用来发送 HTTP 请求,requests 模块比 urllib 模块更简洁。 requests模块支持: 自动处理url编码自动处理post请求…...

工业智能网关解决方案:物联网仓储环境监测系统
仓储是连接生产、供应和销售的中转系统,对于促进生产、提高效率有着重要的辅助作用。对于很多大型工厂或食品厂来说,需要对仓储环境进行严控的控制,以确保产品或食品的质量,避免不必要的产品损耗,提高产品存管的水平。…...

Linux进程线程管理
目录 存储管理 linux内存管理基本框架 系统空间管理和用户空间管理 进程与进程调度 进程四要素 用户堆栈的扩展 进程三部曲:创建,执行,消亡 系统调用exit(),wait() 内核中的互斥操作 存储管理 linux内存管理基本框架 系统空间管理…...

分享111个HTML电子商务模板,总有一款适合您
分享111个HTML电子商务模板,总有一款适合您 111个HTML电子商务模板下载链接:https://pan.baidu.com/s/1e8Wp1Rl9RaFrcW0bilIatg?pwdc97h 提取码:c97h Python采集代码下载链接:采集代码.zip - 蓝奏云 HTML5家居家具电子商务网…...
百度前端必会手写面试题整理
请实现一个 add 函数,满足以下功能 add(1); // 1 add(1)(2); // 3 add(1)(2)(3);// 6 add(1)(2, 3); // 6 add(1, 2)(3); // 6 add(1, 2, 3); // 6function add(...args) {// 在内部声明一个函数,利用闭包的特性保存并收集…...

ubuntu 安装支持GPU的Docker详细步骤
安装依赖项 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common 添加 Docker GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo apt-key fingerpr…...

usbmon+tcpdump+wireshark USB抓包
文章目录usbmon抓包及配合wireshark解析usbmon抓包及配合wireshark解析 usbmon首先编译为内核模块,然后通过modprobe usbmon加载到linux sys文件系统中 rootroot-PC:~# modprobe usbmon 而后 linux系统下安装 tcpdump rootroot-PC:~# apt-get install tcpdump…...

【LeetCode】剑指 Offer 04. 二维数组中的查找 p44 -- Java Version
题目链接: https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 1. 题目介绍(04. 二维数组中的查找) 在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递…...

TDengine 3.0.2.5 查询再优化!揭秘索引文件的工作原理
TDengine 3.0 虽然对底层做了大规模的优化重构,但是相对于数据文件的工作逻辑和 2.0 相比是整体保持不变的。本系列文章的主旨在于帮助用户深入理解产品,并且拥有基本的性能调试思路,从而获得更好的产品体验。本期文章会在讲解 TDengine 时序…...

蓝牙耳机哪个品牌性价比高?性价比高的无线蓝牙耳机
现如今耳机已经十分普及,大多数人会随身佩戴蓝牙耳机,相较于传统耳机,无线耳机不仅携带方便,舒适度上也更加出色。不过市面上的无线耳机种类繁多,很多朋友不知道该如何挑选,所以小编特意整理了一期性价比高…...
python的disutils创建分发包
python中的distutils包主要用创建共享包,安装包,在平时安装python模块的时候,使用的命令如下: python setup.py install 其实以上代码就是distuitls包提供的功能,直接使用setup.py来进行安装一个包,在用这种…...

【洛谷】P1195 口袋的天空
明显看出为最小生成树,那么:难点在哪里呢?if(cntn-k)//******{flag1;break;}为什么是cntn-k呢而不是k呢?!!!解释:(如果每个已经连在一起了就不能分开,不管多少…...

JavaScript高级程序设计读书分享之3章——3.5操作符
JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 目录 操作符 一元操作符 递增/递减操作符 一元加和减 布尔操作符 逻辑非 逻辑与 逻辑或 乘性操作符 乘法操作符 除法操作符 取模操作符 加性操作符 加法操作符 减法操作符 关系操作符 相等操…...

moveToCoordinateF3DconcatenateRotations
moveToCoordinate 演示视频: 注意:前提是3~6轴机器人机构且不是PickAndPlace 该方法_3D。Poses.moveToCoordinate 移动由 指定的对象,该对象 对应于支持的机器人配置之一,只要标识的机器人配置支持,其第一个动画指向指定坐标和指定旋转。这无需您定义姿势即可工作。 工…...
多线程面试题开胃菜6(5道)
一、Fork/Join 框架是干什么的?大任务自动分散小任务,并发执行,合并小任务结果。二、线程数过多会造成什么异常?线程过多会造成栈溢出,也有可能会造成堆异常。三、说说线程安全的和不安全的集合。Java 中平时用的最多的…...

植物大战 List——C++
这里写目录标题vector和stirng的细节对于stringlist的使用list的迭代器反向迭代器构造函数关于list::sort的排序uniquelist的底层模拟实现结点类的实现迭代器模拟实现list实现插入的实现迭代器失效inserterase析构函数拷贝构造赋值构造函数vector和stirng的细节 复习vector的深…...

安灯(andon)系统是车间现场管理的必备工具
安灯(andon)系统应用越来越广泛,不单单局限于汽车行业,更多生产型企业意识到了提高工作效率的重要性,提高工作效率根本的能提高生产水平,提高产量,而且安灯(andon)系统不…...

Hazel游戏引擎(004)
本人菜鸟,文中若有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/GameEngineLightWeight(中文的注释适合中国人的你) 文章目录前言操作步骤讲解GitHubHazel项目此项目定位项目属性修改Sand…...

【CS224W】(task4)图嵌入表示学习
note node2vec: 计算随机游走概率从节点uuu开始模拟rrr条长度为lll的游走链路使用 Stochastic Gradient Descent 优化损失函数 Node2vec在节点分类方面表现更好;而其他方法在链路预测上效果更好,如random walk效率更高;graph emb…...

分享111个HTML医疗保健模板,总有一款适合您
分享111个HTML医疗保健模板,总有一款适合您 111个HTML医疗保健模板下载链接:https://pan.baidu.com/s/1YInaQDnUVsXYtMh1Ls-BHg?pwdxvfc 提取码:xvfc Python采集代码下载链接:采集代码.zip - 蓝奏云 import os import shuti…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...