request模块基本使用方法

news2025/3/16 5:46:16

文章目录

  • 一、前言
  • 二、请求
    • 2.1 请求方式
    • 2.2 请求参数
    • 2.3 cookie
  • 三、响应

一、前言

官方文档:https://requests.readthedocs.io/en/latest/

模块安装:pip install request

二、请求

2.1 请求方式

常用请求方法:getpost

请求方法含义
get向特定的资源发出请求
post向指定资源提交数据进行处理请求(例如提交表单或者上传文件)
put向指定资源位置上传其最新内容
delete请求服务器删除Request-URL所标识的资源
options返回服务器针对特定资源所支持的HTTP请求方法
head向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回

2.2 请求参数

常用请求参数:

请求参数含义
url请求的url,必选参数
params请求参数
headers请求头
data表单数据

详细参数解析:

params参数:一般用来在url的查询字符串发送数据

payload = {'key1': 'value1', 'key2': 'value2'}

r = requests.get('https://httpbin.org/get', params=payload)
# url:https://httpbin.org/get?key2=value2&key1=value1

stream参数:流式传送数据,可以用来将数据分流进行下载,搭配response.iter_content使用

r = requests.get('https://api.github.com/events', stream=True)

with open(filename, 'wb') as fd:
    for chunk in r.iter_content(chunk_size=128):
        fd.write(chunk)

headers参数:向请求添加http标头,所有标头值必须是字符类型

url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'my-app/0.0.1'}

r = requests.get(url, headers=headers)

一些常用的请求头:

请求头含义
user-agent与浏览器或其他生成请求的客户端软件有关的信息
referer发出请求的原始URL
cookie提交服务器向客户端发布的其他参数

data参数:发送表单数据,表单数据可以为元组列表或者字典类型

payload = {'key1': 'value1', 'key2': 'value2'}

r = requests.post('https://httpbin.org/post', data=payload)

json参数::发送json类型的表单数据

import json

url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}

# r = requests.post(url, data=json.dumps(payload))
r = requests.post(url, json=payload)

proxies参数:

proxies = 
{
    "http" : "http://127.0.0.1:8888",
    "https" : "https://"127.0.0.1:8888",
}
requests.get(url, proxies = proxies)

files参数:上传文件,可以设置文件名,内容类型,头部信息,或者直接传送数据

url = 'https://httpbin.org/post'

files = {'file': open('report.xls', 'rb')}
# files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
# files = {'file': ('report.csv', 'some,data,to,send\nanother,row,to,send\n')}

r = requests.post(url, files=files)

文件较大时,可以采用流式上传(建议用二进制模式打开):

with open('massive-body', 'rb') as f:
    requests.post('http://some.url/streamed', data=f)

allow_redirects参数:默认情况下,requests发送的请求除了head之外,都会自动进行重定向,可以通过设置allow_redirects值为False来取消重定向。

url = 'https://api.github.com/some/endpoint'

r = requests.get(url, allow_redirects = False)

verify参数:向网站发送请求时,会像 Web 浏览器一样验证 HTTPS 请求的 SSL 证书。如果无法验证证书,将抛出 SSLError;可以令verify=False也可以将ssl证书路径传递给verify参数。

url = 'https://api.github.com/some/endpoint'

# r = requests.get(url, verify = False)
r = requests.get(url, verify='/path/to/certfile')

timeout参数:通过设置timeout,可以强制请求要在特定的时间内返回结果,否则就报错。

url = 'https://api.github.com/some/endpoint'

r = requests.get(url, timeout = 1)

除此之外,也可以使用retrying模块来刷新网页,模块安装:pip install retrying。retry方法可以在函数报错后重新执行,stop_max_attempt_number为最大刷新次数。

from retrying import retry

@retry(stop_max_attempt_number=3) #最大刷新次数为3
def test():
    url = 'https://api.github.com/some/endpoint'
    r = requests.get(url, timeout = 1)
    assert r.status_code == 200 # 不是200,也会报错
    return r


if __name__ == '__main__':
    try:
        r = test()
    except Exception as e:
        print("error")
        r = None

2.3 cookie

(1)原理:由于http是无状态协议,一旦客户端和服务器的数据交换完毕,就会断开连接,再次请求会重新连接。为了让服务器知道用户身份,那就在每次请求时带上cookie(身份证),这样就能针对不同用户做出不同响应。

(2)分类:cookie按照过期时间分为:会话cookie持久cookie。会话cookie在用户退出浏览器时就会删除;而持久cookie无论是退出浏览器,还是重启电脑它依然存在,但持久cookie通常会有过期时间或者有效期

(3)添加cookies的方式:

  1. 直接添加到headers中:

    url = 'https://httpbin.org/cookies'
    headers = {
        'cookies_name' : "cookies_values"
    }
    
    r = requests.get(url, headers=headers)
    
  2. 传给cookies参数:

    url = 'https://httpbin.org/cookies'
    cookies = { "cookies_name" : "cookies_values"}
    
    r = requests.get(url, cookies=cookies)
    
  3. 获取响应提取cookies:

    url = 'https://httpbin.org/cookies'
    r = requests.get(url)
    
    cookies = requests.utils.dict_from_cookiejar(r.cookies)
    
  4. 使用session模块:session能够自动带上前一次请求的cookie

    s = requests.Session()
    r = s.get(url , headers)
    

三、响应

response常用属性:

属性含义
text响应体,str类型
content响应体,bytes类型
url响应url
status_code响应状态码
request.headers请求头
headers响应头
encoding编码
history请求历史

常见状态码:

状态码含义
100 Continue已收到请求消息头,客户端应继续发送主体。请求完成后,再由服务器返回另一个响应。
200 Ok成功提交请求
301 Moved Permanently将浏览器永久重定向到另外一个在Location消息头中指定的URL
302 Found将浏览器暂时重定向到另外一个在Location消息头中指定的URL,客户端应在随后的请求中恢复使用原始URL.
400 Bad Request客户端提交了一个无效的HTTP请求
401 Unauthorized服务器在许可请求前要求HTTP进行身份验证。
403 Forbidden不管是否通过身份验证,禁止任何人访问被请求的资源。
404 Not Found所请求的资源并不存在。
405 Method Not Allowed指定的URL不支持请求中使用的方法。
500 Internal Server Error服务器在执行请求时遇到错误

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

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

相关文章

内网攻防——红日靶场(一)

在学习内网的过程中有着诸多不了解的内容。希望能借下面的靶场来步入内网的大门。 一、准备阶段 首先准备好我们的虚拟机 之前有学过关于:工作组、域、DC的概念。 了解一下此时的网络拓扑图 1.设置网络VMnet1和Vmnet8 将VMnet1作为内网,VMnet8作为外…

协议-LoRa-Lorawan

是什么? LoRa是低功耗广域网通信技术中的一种,是Semtech公司专有的一种基于扩频技术的超远距离无线传输技术。LoRaWAN是为LoRa远距离通信网络设计的一套通讯协议和系统架构。它是一种媒体访问控制(MAC)层协议。LoRa = PHY Layer LoRaWAN = MAC Layer功耗最低,传输最远 ![ …

redis主从搭建

1. 哨兵 1.1 ⼈⼯恢复主节点故障 Redis 的主从复制模式下,⼀旦主节点由于故障不能提供服务,需要⼈⼯进⾏主从切换,同时⼤量 的客⼾端需要被通知切换到新的主节点上,对于上了⼀定规模的应⽤来说,这种⽅案是⽆法接受的&…

Linux中Gdb调试工具常用指令大全

1.gdb的安装 如果你是root用户直接用指令 :yum install gdb ;如果你是普通用户用指令:sudo yum install gdb; 2.gdb调试前可以对你的makefile文件进行编写: 下面展示为11.c文件编写的makefile文件: code…

操作系统-八股

进程基础: 进程定义:运行中的程序,有独立的内存空间和地址,是系统进行资源调度和分配的基本单位。 并发,并行 并发就是单核上面轮询,并行就是同时执行(多核); 进程上下…

ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值

note 问题背景:序列推荐(SR)任务旨在预测用户可能的下一个交互项目。近年来,大型语言模型(LLMs)在SR系统中表现出色,但它们巨大的规模使得在实际平台中应用变得低效和不切实际。 研究动机&…

71.HarmonyOS NEXT PicturePreviewImage组件深度剖析:从架构设计到核心代码实现

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT PicturePreviewImage组件深度剖析:从架构设计到核心代码实现 (一) 文章目录 HarmonyOS NEXT PicturePreviewImage组件深…

简单实现京东登录页面

Entry Component struct Index {State message: string ;build() { Column(){//顶部区域Row(){Image($r(app.media.jd_cancel)).width(20).height(20)Text(帮助)}.width(100%).justifyContent(FlexAlign.SpaceBetween)//logo图标Image($r(app.media.jd_logo)).width(250).heig…

9.贪心算法

简单贪心 1.P10452 货仓选址 - 洛谷 #include<iostream> #include<algorithm> using namespace std;typedef long long LL; const int N 1e510; LL a[N]; LL n;int main() {cin>>n;for(int i 1;i < n;i)cin>>a[i];sort(a1,a1n);//排序 LL sum 0…

大模型训练全流程深度解析

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 1. 大模型训练概览1.1 训练流程总览1.2 关键技术指标 2. 数据准备2.1 数据收集与清洗2.2 数据…

每日一题---单词搜索(深搜)

单词搜索 给出一个二维字符数组和一个单词&#xff0c;判断单词是否在数组中出现&#xff0c; 单词由相邻单元格的字母连接而成&#xff0c;相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。 数据范围&#xff1a; 0 < 行长度 < 100 0 < 列长度 <…

插入排序c++

插入排序的时间复杂度为O&#xff08;N^2&#xff09;&#xff0c;和冒泡排序的时间复杂度相同&#xff0c;但是在某些情况下插入排序会更优。 插入排序的原理是&#xff1a;第1次在0~0范围内排序&#xff0c;第2次在0~1范围内排序&#xff0c;第3次在0~2范围内排序……相当于…

Swagger 从 .NET 9 中删除:有哪些替代方案

微软已经放弃了对 .NET 9 中 Swagger UI 包 Swashbuckle 的支持。他们声称该项目“不再由社区所有者积极维护”并且“问题尚未得到解决”。 这意味着当您使用 .NET 9 模板创建 Web API 时&#xff0c;您将不再拥有 UI 来测试您的 API 端点。 我们将调查是否可以在 .NET 9 中使用…

嵌入式八股ARM篇

前言 ARM篇主要介绍一下寄存器和中断机制,至于汇编这一块…还请大家感兴趣自行学习 1.寄存器 R0 - R3 R4 - R11 寄存器 R0 - R3一般用作函数传参 R4 - R11用来保存程序运算的中间结果或函数的局部变量 在函数调用过程中 注意在发生异常的时候 cortex-M0架构会自动将R0-R3压入…

使用DeepSeek和墨刀AI,写PRD文档、画原型图的思路、过程及方法

使用DeepSeek和墨刀AI&#xff0c;写PRD文档、画原型图的思路、过程及方法 现在PRD文档要如何写更高效、更清晰、更完整&#xff1f; 还是按以前的思路写PRD&#xff0c;就还是以前的样子。 现在AI这么强大&#xff0c;产品经理如何使用DeepSeek写PRD文档&#xff0c;产品经…

【VUE2】第五期——VueCli创建项目、Vuex多组件共享数据、json-server——模拟服务端api

黑马程序员视频地址&#xff1a;091-vuex的基本认知_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HV4y1a7n4?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p91 目录 1 VueCli 自定义创建项目 2 Eslint代码规范 2.1 规…

rpmlib(SetVersions) is needed by can-uilts-v2019.00.0-alt1.aarch64

在我在Linux中安装离线CAN工具时&#xff0c;出现了一个问题&#xff0c; rootwanghuo:~# rpm -ivh can-uilts-v2019.00.0-alt1.aarch64.rpm error: Failed dependencies:rpmlib(SetVersions) is needed by can-uilts-v2019.00.0-alt1.aarch64 意思是尝试安装 can-uilts-v20…

CNN 稠密任务经典结构

FCN UNet FPN FCNUNETFPNpadding无&#xff08;逐渐变小&#xff09; 有&#xff08;左右对称&#xff09;上采样 双线性双线性 最近邻跳跃链接 相加 Cropcat 1x1卷积相加 三个网络差不多&#xff0c;UNet名字最直观&#xff0c;后续流传…

算法刷题整理合集(二)

本篇博客旨在记录自已的算法刷题练习成长&#xff0c;里面注有详细的代码注释以及和个人的思路想法&#xff0c;希望可以给同道之人些许帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误或遗漏之处&#xff0c;望各位可以在评论区指正出来&#xf…

STM32配套程序接线图

1 工程模板 2 LED闪烁 3LED流水灯 4蜂鸣器 5按键控制LED 6光敏传感器控制蜂鸣器 7OLED显示屏 8对射式红外传感器计次 9旋转编码器计次 10 定时器定时中断 11定时器外部时钟 12PWM驱动LED呼吸灯 13 PWM驱动舵机 14 PWM驱动直流电机 15输入捕获模式测频率 16PWMI模式测频率占空…