Python requests模块

news2024/11/26 4:31:41

一、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-8

response.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 json
  
url = '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)

在这里插入图片描述

– 求知若饥,虚心若愚。

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

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

相关文章

软件工程(5)--喷泉模型

前言 这是基于我所学习的软件工程课程总结的第五篇文章。 迭代是软件开发过程中普遍存在的一种内在属性。经验表明&#xff0c;软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代&#xff0c;在面向对象范型中比在结构化范型中更常见。 一般说来&#xff0c;使用…

新闻稿怎么发?影响发稿价格的因素

在当今的信息化社会&#xff0c;新闻稿是传播信息的重要手段&#xff0c;在企业、大众媒体、政府机构以及其他组织中都广泛使用新闻稿来向外界发布信息。但是&#xff0c;发布新闻稿既要求新闻稿内容准确&#xff0c;又要求要有良好的发布形式&#xff0c;这就要求发布者要懂得…

专用舆情监测服务公司,TOOM舆情监测公司排名全国

舆情监测公司是专门从互联网、传媒等渠道搜集信息&#xff0c;对与客户相关的信息进行筛选、分析和报告&#xff0c;帮助客户及时了解和掌握舆情动态&#xff0c;保障客户的声誉和利益&#xff0c;专用舆情监测服务公司&#xff0c;TOOM舆情监测公司排名全国。 一、专用舆情监…

Win10系统不需要的服务项怎么删除?

Win10系统不需要的服务项怎么删除&#xff1f;在使用电脑的时候&#xff0c;里面会有一些不需要的服务项目。比如一些我们以前安装的软件&#xff0c;卸载之后的服务项残留等等。那么如何去进行不需要的服务项删除呢&#xff1f;一起来看看具体的方法分享吧。 操作教程 1、首先…

【C++提高笔记】泛型编程与STL技术

文章目录模板的概念函数模板函数模板语法函数模板注意事项函数模板案例普通函数与函数模板的调用规则模板的局限性类模板类模板语法类模板与函数模板区别类模板中成员函数创建时机类模板对象做函数参数类模板与继承类模板成员函数类外实现类模板分文件编写类模板与友元类模板案…

从源码角度解析SpringMVC执行流程

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 SpringMVC执行流程在面试中经常会被问到&#xff0c;本篇文章通过源码的方式简单的了解一下SpringMVC执行流程。 先看流程 先看一下Sp…

基于java的一款实时聊天系统,包含服务端 + 客户端 + web端

最终效果为什么先看最终效果&#xff1f;因为此刻代码已经撸完了。更重要的是我们带着感官的目标去进行后续的分析&#xff0c;可以更好地理解。标题中提到了&#xff0c;整个工程包含三个部分&#xff1a;1、聊天服务器聊天服务器的职责一句话解释&#xff1a;负责接收所有用户…

图像去噪技术简述

随着每天拍摄的数字图像数量激增&#xff0c;对更准确、更美观的图像的需求也在增加。然而&#xff0c;现代相机拍摄的图像不可避免地会受到噪声的影响&#xff0c;从而导致视觉图像质量下降。因此&#xff0c;需要在不丢失图像特征&#xff08;边缘、角和其他尖锐结构&#xf…

基于RK3399+YOLO目标检测人工智能图像系统设计

随着 5G 通信技术的大范围普及&#xff0c;传统的目标检测系统已经不再能满足如今步入智 能化的各行各业的需求。消费者对以往依靠机器学习的传统目标检测系统提出了更高的 要求&#xff0c;相关的生产企业也开始向智能化和低功耗化过渡。其中如何将图像增强技术、目 标检测技术…

报表生成工具Stimulsoft中的电子签名和 PDF 数字签名

Stimulsoft Reports 是一款报告编写器&#xff0c;主要用于在桌面和Web上从头开始创建任何复杂的报告。可以在大多数平台上轻松实现部署&#xff0c;如ASP.NET, WinForms, .NET Core, JavaScript, WPF, Angular, Blazor, PHP, Java等&#xff0c;在你的应用程序中嵌入报告设计器…

炔基染料试剂1998119-13-3,Cyanine7 alkyne,花青素CY7炔基

试剂基团反应特点&#xff1a;Cyanine7 alkyne染料在水中的溶解度有限&#xff0c;但可以通过添加二甲基亚砜或二甲基甲酰胺在水性缓冲液中成功结合。氰基7的炔烃衍生物&#xff0c;近红外荧光团&#xff0c;Cy7的类似物。炔烃可以通过铜催化的点击化学与多种叠氮化合物共轭。C…

vue2 Object.definProperty响应式原理(面试题)

注意&#xff1a; 响应式原理和双向数据绑定原理是两回事&#xff0c;一般面试官会先问响应式原理再问双向数据绑定的原理 详细文章 1.响应式原理 核心是数据劫持和依赖收集&#xff0c;是通过数据劫持结合发布者-订阅者模式的方式来实现的。通过Object.defineProperty()为对象…

找出字符串中第一个匹配项的下标-力扣28-java

一、题目描述给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。示例 1&#xff1a;输入&#xff1a;hayst…

java ssm计算机系统在线考试平台idea

本系统主要包括以下功能模块学生、教师、班级、考试评阅、在线考试、试题内容、考试等模块&#xff0c;通过这些模块的实现能够基本满足日常计算机系统平台的操作。 本文着重阐述了计算机系统平台的分析、设计与实现&#xff0c;首先介绍开发系统和环境配置、数据库的设计&…

ASP.NET大型绩效考核评估系统源码

分享一套ASP.NET大型绩效考核评估系统源码&#xff0c;功能基本完善&#xff0c;代码完整&#xff0c;适合学习。本系统采用.Net2010开发&#xff0c;数据库基于SQL2000/2005/2008引擎开发。系统运行环境为.NET2.0IIS6.0基础环境。 源码分享学习&#xff0c;私信获取&#xff…

第40天|LeetCode139. 单词拆分、多重背包

1.题目链接&#xff1a;139. 单词拆分 题目描述&#xff1a; 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 解法&…

SpringBoot 指标监控 Actuator

Spring Boot Actuator为 Micrometer 提供了依赖管理和自动配置&#xff0c;Micrometer是一个支持 众多监控系统 的应用程序指标接口 该功能与&#xff1a;java\jdk\bin 下的 Jconsole 功能雷同 1、pom文件中引入依赖&#xff08;使用的springboot是2.7.2&#xff09; <dep…

15- 决策回归树, 随机森林, 极限森林 (决策树优化) (算法)

1. 决策回归树: from sklearn.tree import DecisionTreeRegressor model DecisionTreeRegressor(criterionmse,max_depth3) model.fit(X,y) # X是40个点 y是一个圆 2. 随机森林 稳定预测: from sklearn.ensemble import RandomForestClassifier # model RandomForestC…

Flink相关的记录

Flink源码编译首次编译的时候&#xff0c;去除不必要的操作&#xff0c;同时install会把Flink中的module安装到本地仓库&#xff0c;这样依赖当前module的其他组件就无需去远程仓库拉取当前module&#xff0c;节省了时间。mvn clean install -T 4 -DskipTests -Dfast -Dmaven.c…

对比Vector、ArrayList、LinkedList有何区别?

第8讲 | 对比Vector、ArrayList、LinkedList有何区别&#xff1f; 我们在日常的工作中&#xff0c;能够高效地管理和操作数据是非常重要的。由于每个编程语言支持的数据结构不尽相同&#xff0c;比如我最早学习的 C 语言&#xff0c;需要自己实现很多基础数据结构&#xff0c;管…