Requests库

news/2023/12/3 11:32:04/文章来源:https://blog.csdn.net/qq_52563729/article/details/133208101

构建HTTP请求

构建请求URL参数

https://www.baidu.com/s?wd=iphone&rsv_spt=1

问号后面的部分 wd=iphone&rsv_spt=1 就是 url 参数,每个参数之间是用 & 隔开的。

但是有的时候,我们的url参数里面有些特殊字符,比如 参数的值就包含了 & 这个符号。

那么我们可以把这些参数放到一个字典里面,然后把字典对象传递给 Requests请求方法的 params 参数,如下

urlpara = {'wd':'iphone&ipad','rsv_spt':'1'
}response = requests.get('https://www.baidu.com/s',params=urlpara)

构建请求消息头

每个消息头也就是一种 键值对的格式存放数据,如下所示

user-agent: my-app/0.0.1
auth-type: jwt-token
headers = {'user-agent': 'my-app/0.0.1', 'auth-type': 'jwt-token'
}
r = requests.post("http://httpbin.org/post", headers=headers)
print(r.text)

构建请求消息体

Web API接口中,消息体基本都是文本,文本的格式主要是这3种: urlencoded ,json , XML。

XML 格式消息体

如果设计者决定用 XML 格式传输一段信息,用Requests库,只需要这样

payload = '''
<?xml version="1.0" encoding="UTF-8"?>
<WorkReport><Overall>良好</Overall><Progress>30%</Progress><Problems>暂无</Problems>
</WorkReport>
'''r = requests.post("http://httpbin.org/post",data=payload.encode('utf8'))
print(r.text)

urlencoded 格式消息体

这种格式的消息体就是一种 键值对的格式存放数据,如下所示

key1=value1&key2=value2

然后使用post方法的时候,指定参数 data 的值为这个字典就可以了,如下

payload = {'key1': 'value1', 'key2': 'value2'}r = requests.post("http://httpbin.org/post", data=payload)
print(r.text)

json 格式消息体

可以使用json库的dumps方法,如下

import requests,jsonpayload = {"Overall":"良好","Progress":"30%","Problems":[{"No" : 1,"desc": "问题1...."},{"No" : 2,"desc": "问题2...."},]
}r = requests.post("http://httpbin.org/post", data=json.dumps(payload))

也可以将 数据对象 直接 传递给post方法的 json参数,如下

r = requests.post("http://httpbin.org/post", json=payload)

检查HTTP响应

检查响应状态码

要检查 HTTP 响应 的状态码,直接 通过 reponse对象的 status_code 属性获取

import requestsresponse = requests.get('http://mirrors.sohu.com/')
print(response.status_code)

检查响应消息头

要检查 HTTP 响应 的消息头,直接 通过 reponse对象的 headers 属性获取

import requests,pprintresponse = requests.get('http://mirrors.sohu.com/')print(type(response.headers))pprint.pprint(dict(response.headers))

运行结果如下

<class 'requests.structures.CaseInsensitiveDict'>
{'Cache-Control': 'no-store','Connection': 'keep-alive','Content-Type': 'text/html; charset=utf8','Date': 'Sat, 21 Sep 2019 09:02:32 GMT','Server': 'nginx','Transfer-Encoding': 'chunked'}

response.headers 对象的类型 是 继承自 Dict 字典 类型的一个 类。

我们也可以像操作字典一样操作它,比如取出一个元素的值

print(response.headers['Content-Type'])

检查响应消息体

获取响应的消息体的文本内容,直接通过response对象 的 text 属性即可获取

import requestsresponse = requests.get('http://mirrors.sohu.com/')
print(response.text)

但是有时候,服务端并不一定会在消息头中指定编码格式,这时, requests的推测可能有误,需要我们指定编码格式。

可以通过这样的方式指定

import requestsresponse = requests.get('http://mirrors.sohu.com/')
response.encoding='utf8'
print(response.text)

如果我们要直接获取消息体中的字节串内容,可以使用 content 属性,

比如

import requests

response = requests.get('http://mirrors.sohu.com/')
print(response.content)

当然,如果可以直接对 获取的字节串 bytes对象进行解码

print(response.content.decode('utf8'))

session机制

requests库给我们提供一个 Session 类 。通过这个类,无需我们操心, requests库自动帮我们保存服务端返回的 cookie数据, HTTP请求自动 在消息头中放入 cookie 数据。

import requests# 打印HTTP响应消息的函数
def printResponse(response):print('\n\n-------- HTTP response * begin -------')print(response.status_code)for k, v in response.headers.items():print(f'{k}: {v}')print('')print(response.content.decode('utf8'))print('-------- HTTP response * end -------\n\n')# 创建 Session 对象
s = requests.Session()# 通过 Session 对象 发送请求
response = s.post("http://127.0.0.1/api/mgr/signin",data={'username': 'byhy','password': '88888888'})printResponse(response)# 通过 Session 对象 发送请求
response = s.get("http://127.0.0.1/api/mgr/customers",params={'action'    :  'list_customer','pagesize'  :  10,'pagenum'   :  1,'keywords'  :  '',})printResponse(response)

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

如若内容造成侵权/违法违规/事实不符,请联系编程新知网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优优嗨聚集团:美团代运营服务,对美团外卖商家有何促进

美团代运营服务一直是美团外卖商家成功的关键因素之一。美团代运营服务是一种专业的营销服务&#xff0c;它可以帮助商家在美团平台上更好地经营和销售&#xff0c;从而提高店铺曝光率、提升用户评价、提高营收等方面的水平。 首先&#xff0c;美团代运营服务可以帮助商家提高店…

Cloudflare进阶技巧:缓存利用最大化

1. 引言 cloudflare我想你应该知道是什么&#xff0c;一家真正意义上免费无限量的CDN&#xff0c;至今未曾有哥们喷它的。当然&#xff0c;在国内的速度确实比较一般&#xff0c;不过这也不能怪它。 CDN最大的特色&#xff0c;我想就是它的缓存功能&#xff0c;达到防攻击&am…

Django(21):使用Celery任务框架

目录 Celery介绍Celery安装Celery使用项目文件和配置启动Celery编写任务调用异步任务查看任务执行状态及结果 设置定时和周期性任务配置文件添加任务Django Admin添加周期性任务启动任务调度器beat Flower监控任务执行状态Celery高级用法与注意事项给任务设置最大重试次数不同任…

AI在材料科学中的应用

7 AI在材料科学中的应用 在这一部分&#xff0c;我们将讨论AI技术在材料科学中的应用。首先&#xff0c;我们将介绍晶体材料的概述&#xff0c;并详细定义晶体材料的物理对称性&#xff0c;具体在第7.1节中讨论。接下来&#xff0c;我们将在第7.2节和第7.3节中讨论两个常见且基…

LabVIEW开发实时自动化多物镜云计算全玻片成像装置

LabVIEW开发实时自动化多物镜云计算全玻片成像装置 数字病理学领域正在迅速发展&#xff0c;这主要是由于计算机处理能力、数据传输速度、软件创新和云存储解决方案方面的技术进步。因此&#xff0c;病理科室不仅将数字成像用于图像存档等简单任务&#xff0c;还用于远程病理学…

Docker 容器跨主机通信 - Flannel

Author&#xff1a;rab 目录 前言一、架构及环境二、服务部署2.1 Etcd 部署2.2 Flannel 部署2.3 Docker 网络配置 三、容器通信验证及路由分析3.1 通信验证3.2 路由转发分析3.3 数据分发分析 总结 前言 今天是中秋佳节&#xff0c;首先在此祝大家“中秋快乐&#xff0c;阖家团…

vue3自定义全局Loading

自定义插件之全局Loading ElementPlus的默认全局Loading 如果完整引入了 Element Plus&#xff0c;那么 app.config.globalProperties 上会有一个全局方法$loading&#xff0c;同样会返回一个 Loading 实例。 名称说明类型默认targetLoading 需要覆盖的 DOM 节点。 可传入一…

B树和B+树的介绍和对比,以及MySQL为何选择B+树

在计算机科学中&#xff0c;B树和B树是常用的数据结构&#xff0c;用于在大规模数据集上进行高效的插入、删除和查找操作。它们在数据库管理系统、文件系统等许多实际应用中发挥着重要作用。本文将深入介绍B树和B树的结构特点、实际应用方面以及它们的优缺点&#xff0c;并最后…

Idea引入thymeleaf失败解决方法

报错 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback.Fri Sep 29 09:42:00 CST 2023 There was an unexpected error (typeNot Found, status404). 原因&#xff1a;html没有使用thymeleaf 首先要引入…

Object.defineProperty()方法详解,了解vue2的数据代理

假期第一篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 Object.defineProperty(),对于这个方法&#xff0c;更多的还是停留在面试的时候&#xff0c;面试官问你vue2和vue3区别的时候&#xff0c;不免要提一提这个方法…

【深度学习实验】卷积神经网络(二):自定义简单的二维卷积神经网络

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 二维互相关运算&#xff08;corr2d&#xff09; 2. 二维卷积层类&#xff08;Conv2D&#xff09; a. __init__&#xff08;初始化&#xff09; b. forward(前向传…

Eclipse环境基于HDFS的API进行开发

文章目录 IOUtils方式读取文件1.文件准备2.下载安装Eclipse3.打开eclipse&#xff0c;新建java项目&#xff0c;添加关于hadoop的一些包4.包内新建类进行开发5.利用打包的方式生成java jar包6.验证代码正确性 其它问题&#xff1a;Exception in thread “main“ java.lang.Unsu…

进阶JS-内置构造函数

基本数据类型&#xff1a;string、number、boolean、undefined、null 引用类型:对象 其实字符串、数值、布尔等基本类型也都有专门的构造函数&#xff0c;这些我们称为包装类型。 JS中几乎所有的数据都可以基于构成函数创建。 const str andy//其实是const strnew String(a…

【AI视野·今日CV 计算机视觉论文速览 第257期】Fri, 29 Sep 2023

AI视野今日CS.CV 计算机视觉论文速览 Fri, 29 Sep 2023 Totally 99 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Learning to Transform for Generalizable Instance-wise Invariance Authors Utkarsh Singhal, Carlos Esteves, Ameesh M…

FairMOT 论文学习

1. 解决了什么问题&#xff1f; 现有的多目标跟踪方案将目标检测和 reID 任务放在一个网络里面优化学习&#xff0c;计算效率高。目标检测首先在每一帧中检测出兴趣目标&#xff0c;要么将其与现有的轨迹关联起来&#xff0c;要么创建一个新的轨迹。这两个任务会相互竞争&…

数据结构之单链表

目录 前言&#xff1a; 链表的定义与结构 单链表的接口实现 显示单链表 创建新结点 单链表尾插 头插的实现简单示例图 尾插经典错误示例1 尾插经典错误示例2 尾插函数的最终实现 单链表头插 单链表尾删 单链表头删 单链表查找 单链表在pos位置之前插入数据x ​编…

PC版企业微信逆向之消息发送CALL-找不到参数文本消息内容,但是确定这就是消息发送CALL

现在遇到的问题是消息内容-如何查看通过esi里面的消息内容&#xff0c;找不到有效的 找不到参数文本消息内容&#xff0c;但是确定这就是消息发送CALL 消息发送call特征码为8d 47 08 50 56 e8 ?? ?? ?? ?? 8b 07 //消息发送CALL如下 **02852932 8B07 mov eax,dword ptr…

Win10怎样取消自动固定到快速访问?

双击桌面上此电脑在菜单栏点击查看在弹出的选项里边选择选项在打开文件资源管理器那里把快速访问改成此电脑在下面隐私部分选择快速访问中显示最近使用文件在快速访问中显示常用文件夹并且清除文件资源管理器记录就行。

安防监控/视频汇聚平台EasyCVR云端录像不展示是什么原因?该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

可观测平台如何存储时序曲线?滴滴实践全历程分享

滴滴的时序曲线量从 2017 年 到 2023 年增长了几十倍。整个过程中我们不断地调整和改进以应对这样的增长。例如时序数据库的选型从最初的 InfluxDB&#xff0c;到 RRDtool&#xff0c;又开发了内存 TSDB 分担查询压力&#xff0c;再到 2020 年开始使用 VictoriaMetrics。载体也…