【python自动化五】接口自动化基础--requests的使用

python的接口请求可以用requests库,这个介绍就不多说了,网上说得很详细。
接下来直接记录下如何使用(当然也不限于自动化的使用)

1.安装requests

requests也需要安装一下

 pip install requests

在这里插入图片描述

2.requests请求

1.常用的请求方法

接口请求通常有get/post/put/delete等类型,我们可以直接根据这种类型请求调用方法,例如:

requests.get(url='')
requests.post(url='', data='')

这里我自己写了个简单的服务,用于测试接口请求,如下图能正常请求到接口数据。
在这里插入图片描述
当然还有其他方法:
在这里插入图片描述
上面是用到哪个类型的请求调用哪个类型,当然也有统一的方法

requests.request(method='',url='')  # :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``.

在这个方法中传入method参数即可,要调用get接口,就传入‘GET’,要调用post接口,就传入‘POST’。
在这里插入图片描述
如上图所示,也能调用成功。
这里我们也可以看一下get方法的具体调用
在这里插入图片描述
其实就是get方法里调用了request方法,所有请求方法都是基于request方法的。

2.请求参数

这里附上request方法中注释,里面解释了各个参数的含义:

"""Constructs and sends a :class:`Request <Request>`.

    :param method: method for the new :class:`Request` object: ``GET``, ``OPTIONS``, ``HEAD``, ``POST``, ``PUT``, ``PATCH``, or ``DELETE``.
    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the query string for the :class:`Request`.
    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
        object to send in the body of the :class:`Request`.
    :param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
    :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`.
    :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`.
    :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload.
        ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')``
        or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content_type'`` is a string
        defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers
        to add for the file.
    :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth.
    :param timeout: (optional) How many seconds to wait for the server to send data
        before giving up, as a float, or a :ref:`(connect timeout, read
        timeout) <timeouts>` tuple.
    :type timeout: float or tuple
    :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``.
    :type allow_redirects: bool
    :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy.
    :param verify: (optional) Either a boolean, in which case it controls whether we verify
            the server's TLS certificate, or a string, in which case it must be a path
            to a CA bundle to use. Defaults to ``True``.
    :param stream: (optional) if ``False``, the response content will be immediately downloaded.
    :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response

    Usage::

      >>> import requests
      >>> req = requests.request('GET', 'https://httpbin.org/get')
      >>> req
      <Response [200]>
    """

这里简单介绍下:

参数含义
method方法,即是‘GET’、‘POST’或者其它
url请求URL
params可选,查询参数,常见于接口url的?后跟的请求参数
data可选,接口请求的body
json可选,接口请求中json化的body体
headers可选,接口请求的header
cookies可选,接口请求的cookie
files可选,文件参数,常用于上传文件的接口
auth可选,认证参数
timeout可选,请求最大等待时间,超时报错
allow_redirects可选,是否允许重定向,一般登录时重定向发生得比较多
proxies可选,可设置代理
verify可选,用于设置SSL证书验证。如果设置为False,将忽略SSL证书验证。
stream可选,设置下载的方式,如果设置为False,则整个文件将一次性下载下来
cert可选, 证书路径

具体类型的请求方法除了method 入参,其他参数基本都是一致的。
我们用得比较多的就是url、params、data、json、headers、cookies参数。这里简单介绍下,照样举一个get和post的例子。
我们实现一个get接口,根据params不同,返回不同的结果

params1 = {
    'param1': 'test1',
    'param2': 'test2'
}
get_res1 = requests.request(method='GET',url='http://ip:port/get/test1', params=params1)

在这里插入图片描述
我们直接在url中传也可以,但是这样有时候会不方便修改入参,看情况选取

get_res1 = requests.request(method='GET',url='http://ip:port/get/test1?param1=test1&param2=test2')

在这里插入图片描述
接下来介绍下json和data的用法,它们都是用来传body体的。
我们主要介绍下需要传入json的body的情况,很多请求是需要请求body是json的格式,我们有如下方法:
1.使用data传入

header = {
    'Content-Type': 'application/json'
}
data = {
    'body_data1': 'test3',
    'body_data2': 'test4'
}
post_res1 = requests.request(method='POST',url='http://ip:port/post/test1', headers=header, data=json.dumps(data))

在这里插入图片描述
注意header和json.dumps(data))缺一不可
2.使用json传入

data = {
    'body_data1': 'test3',
    'body_data2': 'test4'
}
post_res1 = requests.request(method='POST',url='http://ip:port/post/test1', json=data)

在这里插入图片描述
可以看到使用json时,我们无需在headers里注明Content-Type,它自动传入的就是json格式的。
总结如下:
1.当使用json时,如果不指定headers中的content-type,默认为application/json。
2.data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式;如果需要传json格式,需要在headers里指明对应的Content-Type。
如果我们是要传json格式的body体,直接用json比较方便,如果是其他格式,则我们选用data传参;实际使用时按个人实际需要选取。
还有比较常用的header和cookie,这些主要涉及到安全方面,后面爬虫的时候再细说。

3.requests响应

每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息,如状态码、响应头、响应内容等,下方列举了一些常见的响应信息:

参数含义
ok检查 “status_code” 的值,如果小于400,则返回 True,如果不小于 400,则返回 False
is_redirect如果响应被重定向,则返回 True,否则返回 False
is_permanent_redirect如果响应是永久重定向的 url,则返回 True,否则返回 False
next返回重定向链中下一个请求的 PreparedRequest 对象
apparent_encoding编码方式
iter_content迭代响应
iter_lines迭代响应的行
content返回响应的内容,以字节为单位
text返回响应的内容,unicode 类型数据
json返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会报错)
links返回响应的解析头链接
raise_for_status如果发生错误,方法返回一个 HTTPError 对象
close释放与连接池的连接
cookies返回一个 CookieJar 对象,包含了从服务器发回的 cookie
headers返回响应头,字典格式
status_code返回 http 的状态码,比如 200

调用时直接.一下对应的方法即可,我们比较常用的就是status_code,headers,cookies,text,content等
在这里插入图片描述
到这里就是requests的简单运用了,当然实际情况一般比举的例子要复杂,使用时也需要进行进一步的封装。这个后面接着来…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【NLP 5、深度学习的基本原理】

目录 一、梯度下降算法 1.引例 —— 找极小值问题 目标&#xff1a; 方法&#xff1a; 2.梯度 例&#xff1a; 3.求解目标 为什么损失函数越小越好 4.梯度下降法 代码实现 5.细节问题 6.梯度爆炸和梯度消失 梯度爆炸 梯度消失 7.过拟合和欠拟合 欠拟合&#xff08;Underfitting…

DAY168内网对抗-基石框架篇单域架构域内应用控制成员组成用户策略信息收集环境搭建

知识点&#xff1a; 1、基石框架篇-单域架构-权限控制-用户和网络 2、基石框架篇-单域架构-环境搭建-准备和加入 3、基石框架篇-单域架构-信息收集-手工和工具 1、工作组(局域网) 将不同的计算机按照功能分别列入不同的工作组。想要访问某个部门的资源&#xff0c;只要在“…

MATLAB 建筑顶面面积计算(95)

MATLAB 建筑顶面面积计算(95) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 根据给出的建筑顶面点云,计算建筑面积,具体的方法实现和结果如下: 二、算法实现 1.代码 代码如下(示例): % 从 PLY 文件读取点云数据 filename = D:\shuju\屋顶2.ply; % 替换为你的…

Mac M1 安装数据库

1. Docker下载 由于Sqlserver和达梦等数据库&#xff0c;不支持M系列的芯片&#xff0c;所以我们通过docker安装 下载并安装docker: https://www.docker.com/get-started/ 安装完成后&#xff0c;打开docker 2. SQL Server 安装 2.1 安装 打开终端&#xff0c;执行命令 doc…

二十(GIT3)、echarts(折线图、柱状图、饼图)、黑马就业数据平台(主页图表实现、闭包了解、学生信息渲染)

1. echarts 数据可视化&#xff1a;将数据转换为图形&#xff0c;数据特点更加突出 echarts&#xff1a;一个基于 JavaScript 的开源可视化图表库 echarts官网 1.1 echarts核心使用步骤 // 1. 基于准备好的dom&#xff0c;初始化echarts实例 const myChart echarts.init…

软考高级架构-9.4.4-双机热备技术 与 服务器集群技术

一、双机热备 1、特点&#xff1a; 软硬件结合&#xff1a;系统由两台服务器&#xff08;主机和备机&#xff09;、一个共享存储&#xff08;通常为磁盘阵列柜&#xff09;、以及双机热备软件&#xff08;提供心跳检测、故障转移和资源管理功能的核心软件&#xff09;组成。 …

【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤

&#x1f399;告诉你&#xff1a;Java是世界上最美好的语言 &#x1f48e;比较擅长的领域&#xff1a;前端开发 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持续下去的动力&#xff01; 目录 一. 作者有话说 …

Kubernetes Nginx-Ingress | 禁用HSTS/禁止重定向到https

目录 前言禁用HSTS禁止重定向到https关闭 HSTS 和设置 ssl-redirect 为 false 的区别 前言 客户请求经过ingress到服务后&#xff0c;默认加上了strict-transport-security&#xff0c;导致客户服务跨域请求失败&#xff0c;具体Response Headers信息如下&#xff1b; 分析 n…

小程序入门学习(八)之页面事件

一、下拉刷新新事件 1. 什么是下拉刷新 下拉刷新是移动端的专有名词&#xff0c;指的是通过手指在屏幕上的下拉滑动操作&#xff0c;从而重新加载页面数据的行为。 2. 启用下拉刷新 启用下拉刷新有两种方式&#xff1a; 全局开启下拉刷新&#xff1a;在 app.json 的 window…

C++(十二)

前言&#xff1a; 本文将进一步讲解C中&#xff0c;条件判断语句以及它是如何运行的以及内部逻辑。 一&#xff0c;if-else,if-else语句。 在if语句中&#xff0c;只能判断两个条件的变量&#xff0c;若想实现判断两个以上条件的变体&#xff0c;就需要使用if-else,if-else语…

[Linux]文件属性和权限

目录 一.Linux文件的属性二.Linux用户权限分类三.文件权限的查询与修改1.修改用户的权限1).一般法2).8进制法 2.修改所属组和所属者3.如何在创建文件时权限预分配 在学习linux的时候&#xff0c;我们用ll命令显示文件的详情信息&#xff0c;难免会发现文件名前面会有一大堆其它…

ElK 8 收集 MySQL 慢查询日志并通过 ElastAlert2 告警至飞书

文章目录 1. 说明2. 启个 mysql3. 设置慢查询4. filebeat 设置5. 触发慢查询6. MySQL 告警至飞书 1. 说明 elk 版本&#xff1a;8.15.0 2. 启个 mysql docker-compose.yml 中 mysql&#xff1a; mysql:# restart: alwaysimage: mysql:8.0.27# ports:# - "3306:3306&q…

springSecurity权限控制

权限控制&#xff1a;不同的用户可以使用不同的功能。 我们不能在前端判断用户权限来控制显示哪些按钮&#xff0c;因为这样&#xff0c;有人会获取该功能对应的接口&#xff0c;就不需要通过前端&#xff0c;直接发送请求实现功能了。所以需要在后端进行权限判断。&#xff0…

力扣打卡9:重排链表

链接&#xff1a;143. 重排链表 - 力扣&#xff08;LeetCode&#xff09; 这是一道操作链表的题。按照要求&#xff0c;我们可以将解题的步骤分成三步。 1.找链表中间结点&#xff08;我使用了快慢指针寻找&#xff09;&#xff0c;并断开。 2.现在有2链表&#xff0c;将后段…

计算机键盘的演变 | 键盘键名称及其功能 | 键盘指法

注&#xff1a;本篇为 “键盘的演变及其功能” 相关几篇文章合辑。 英文部分机翻未校。 The Evolution of Keyboards: From Typewriters to Tech Marvels 键盘的演变&#xff1a;从打字机到技术奇迹 Introduction 介绍 The keyboard has journeyed from a humble mechanical…

【Appium报错】安装uiautomator2失败

目录 1、通过nmp安装uiautomator2&#xff1a;失败 2、通过 Appium 的平台直接安装驱动程序 3、通过pip 来安装 uiautomator2 1、通过nmp安装uiautomator2&#xff1a;失败 我先是通过npm安装的uiautomator2&#xff0c;也显示已经安装成功了&#xff1a; npm install -g …

SSM整合原理实战案例《任务列表案例》

一、前端程序搭建和运行: 1.整合案例介绍和接口分析: (1).案例功能预览: (2).接口分析: 学习计划分页查询 /* 需求说明查询全部数据页数据 请求urischedule/{pageSize}/{currentPage} 请求方式 get 响应的json{"code":200,"flag":true,"data&…

Chrome扩展程序开发示例

项目文件夹内文件如下&#xff1a; manifest.json文件内容&#xff1a; {"manifest_version": 3,"name": "我的法宝","description": "我的有魔法的宝贝","version": "1.0","icons": {"…

石头剪子布

石头剪子布 C语言实现C实现Java实现Python实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 石头剪子布&#xff0c;是一种猜拳游戏。起源于中国&#xff0c;然后传到日本、朝鲜等地&#xff0c;随着亚欧贸易的不断发展它传到了欧洲&…

RabbitMQ核心概念及工作流程 + AMQP

文章目录 一. RabbitMQ核心概念1. Producer, Consumer, Broker2. Connection和Channel3. Virtual host4. Queue5. Exchange 二. RabbitMQ的工作流程三. AMQP四. web界面操作对用户操作对虚拟机操作 一. RabbitMQ核心概念 RabbitMQ是⼀个消息中间件, 也是⼀个⽣产者消费者模型.…