接口自动化测试-No1- Python requests发请求

学习查考文档

https://www.w3cschool.cn/requests2/

一, 写代码方式实现接口Get请求

二, Response返回内容讲解

三, 写代码方式实现接口Post请求

四, 特殊情况

一, 实现Get请求

import requests

#方法1

url = "http://*/api/v1/goods"

r1 = requests.get(url)

print(r1.status_code)

print(r1.headers)

print(r1.text)

#方法2

url2 = "http://*/api/v1/login"

params = {

"page": 2,
"size": 2

}

r2 = requests.get(url2, params=params)

print(r2.text)

输出结果

"""

Requests传递URL参数

"""

import requests

#方法1

url = "http://*/api/v1/goods"

payload = {

"page": 1,

"size": 1

}

r1 = requests.get(url, params=payload)

print(r1.status_code)

print(r1.headers)

print(r1.text)

输出结果

(只取到第一页的第一个数据)

二, Response返回内容

-- r.status_code # 响应状态码

-- r.content # 字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩

-- r.headers # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None

-- r.json() # Requests中内置的JSON解码器 ,json转成python的字典了

-- r.url # 获取url

-- r.encoding # 编码格式

-- r.cookies # 获取返回的cookie

-- r.text # 字符串方式的响应体,会自动根据响应头部的字符编码进行解码

-- r.ok # 返回True / False 状态码在200-400之间 返回True

# 状态码在400-600之间返回 False

-- r.history # 有重定向请求的时候,可以查看重定向记录

-- r.apparent_encoding # 分析响应编码

第1个例子:

"""

get 请求的路径参数

id 是python的内置函数, 变量不要叫id

"""

import requests

sp_id = 10

url = f"http://*/api/v1/goods/{sp_id}"

print(url)

r1 = requests.get(url)

print(r1.status_code) #200

print(r1.headers) # respond headers

print(r1.text) # 以文本的方式

print(r1.content) # byte 解码 文件,图片

#.json() 用作json解析器

print(r1.json())

print(type(r1.json()))

print(r1.json()"msg")

#输出msg对应的value值

#json是有规律的字符串{"key": value}

print(r1.json().get("msg"))

print(dict(r1.cookies)) # 输出cookies里面的值

第2个例子:

import requests

url = "https://www.baidu.com/"

r = requests.get(url)

#print(r.text) 输出的内容种含有乱码 “更多产哔

#print(r.statuscode)

print(r.encoding) # 使用的编码ISO-8859-1

print(r.apparent_encoding) #正确的编码utf-8

#动态获取到html里面的编码,需要知道返回的html编码

print(r.content)

print(r.content.decode(r.apparent_encoding)) #

#固定用法使用正确的编码格式进行解码

#输出含有中文的文字 “更多产品”

三, 实现Post请求

"""

post请求Content-Type第一种取值的方式

Content-Type: application/x-www-form-urlencoded

"""

import requests

url = "http://*/api/v4/login"

body = {

"username": "test",
"password": "123456"

}

r = requests.post(url, data=body)

print(r.text)

"""

POST请求Content-Type第二种取值的方式

Content-Type: application/josn

POST推荐这种

"""

print("------第一种方法-----")

import requests

url = "http://*/api/v1/login"

body = {

"username": "test",
"password": "123456"

}

r = requests.post(url, json=body)

print(r.status_code)

print(r.json())

"""

POST 不推荐这种

"""

import requests

import json

print("------第二种方法-----")

url = "http://*/api/v1/login"

body = {

"username": "test",
"password": "123456"

}

headers = {

"Content-Type": "application/json"

}

r = requests.post(url, headers=headers, data=json.dumps(body))

print(r.text)

输出结果

四,特殊情况,忽略证书

"""

https请求忽略证书校验

"""

import requests

import warnings

warnings.filterwarnings('ignore')

url = "https://www.cnblogs.com/jiangkeji/"

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

#print(r.text)

print(r.status_code)

输出结果:

本文转载于网络 如有侵权请联系删除

相关文章

  • 浏览器标签tab窗口切换时事件状态侦听

    浏览器标签tab窗口切换时事件状态侦听背景项目中使用到了websocket,用户在浏览器窗口切换或者浏览器最下话后,websocket的状态有可能断开,且没有重试机制,所以想通过用户回到当前页面的时候,系统能够自动刷新,重新连接socket解决方法通过添加浏览器的监听事件,判断用户是否离开了当前的页面。document.addEventListener('visibilitychange',function(){ varisHidden=document.hidden; if(isHidden){//切离该页面时执行 alert("浏览器处于最小化状态了"); document.title='当焦点不在当前窗口时的网页标题'; }else{//切换到该页面时执行 alert("页面处于当前状态了"); document.title='再变回来或者做点其他的'; } });复制具体使用判断用户重新回到当前页面的时候,进行页面刷新document.addEventListener('

  • 为了不让GPU等CPU,谷歌提出“数据回波”榨干GPU空闲时间,训练速度提升3倍多

    晓查发自凹非寺 量子位报道|公众号QbitAI因为通用计算芯片不能满足神经网络运算需求,越来越多的人转而使用GPU和TPU这类专用硬件加速器,加快神经网络训练的速度。但是,用了更快的GPU和TPU就一定能加速训练吗?训练流水线的所有操作并不都是在加速器上运行。上游数据处理(如磁盘I/O和数据预处理)就不能在加速器上运行。随着GPU等加速器越来越快,超过了CPU、磁盘处理数据的速度,上游就逐渐成了训练瓶颈。在某些情况下,GPU上游的代码花费的时间甚至是GPU本身运行时间的几倍。上游没做完,下游只能空等,浪费了大量时间。为此,GoogleAI团队,提出一种简单的数据回波(DataEchoing)方法,可以解决这个问题。该方法最多能将训练速度加速3倍以上,且对模型的精度没有明显影响。JeffDean也在Twitter上转发点赞。重复数据让GPU不空等很多情况下,上游花费的时间比加速器更长,使用更快的GPU或TPU根本不会提高训练速度。如果投入大量的工程工作以及额外的计算资源,确实可以加快流水线的速度。对于非常小的数据集,可以离线预先计算扩增的数据集,并将整个预处理的数据集加载到内存中。但这种

  • 死磕Synchronized底层实现,面试你还怕什么?

    关于synchronized的底层实现,网上有很多文章了。但是很多文章要么作者根本没看代码,仅仅是根据网上其他文章总结、照搬而成,难免有些错误;要么很多点都是一笔带过,对于为什么这样实现没有一个说法,让像我这样的读者意犹未尽。本系列文章将对HotSpot的synchronized锁实现进行全面分析,内容包括偏向锁、轻量级锁、重量级锁的加锁、解锁、锁升级流程的原理及源码分析,希望给在研究synchronized路上的同学一些帮助。大概花费了两周的实现看代码(花费了这么久时间有些忏愧,主要是对C++、JVM底层机制、JVM调试以及汇编代码不太熟),将synchronized涉及到的代码基本都看了一遍,其中还包括在JVM中添加日志验证自己的猜想,总的来说目前对synchronized这块有了一个比较全面清晰的认识,但水平有限,有些细节难免有些疏漏,还望请大家指正。本篇文章将对synchronized机制做个大致的介绍,包括用以承载锁状态的对象头、锁的几种形式、各种形式锁的加锁和解锁流程、什么时候会发生锁升级。需要注意的是本文旨在介绍背景和概念,在讲述一些流程的时候,只提到了主要case,对于

  • 外观模式

     外观模式又称为门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。我们还是用通俗的语言来解释这句话的意思。当你需要实现某个功能,而实现这个功能需要调用N多接口,N多的类,这个时候实际上会使得你的代码变得耦合度非常大,怎么办呢?我们可以将这一系列接口封装起来,对外只提供一个新的接口来实现这个功能。这其实就是封装的概念。所以我们的类结构同样也很简单。我们完成一个功能可能需要调用很多个SubClass,这个时候我们提供一个统一的“门面”,这使得我们的代码耦合度有大大降低。接着看代码是如何实现外观模式的。子系统方法1:1packageday_24_facade; 2 3/** 4*子系统1 5*@authorturbo 6* 7*2016年9月25日 8*/ 9publicclassSubSystemOne{ 10publicvoidmethodOne(){ 11System.out.println("子系统方法1"); 12} 13}复制子系统方法2:1packageday_24_facade; 2 3/**

  • Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块

    这是一篇系列博文,我将使用Abp.Zero搭建一套集成手机号免密登录验证与号码绑定功能的用户系统: Abp.Zero手机号免密登录验证与号码绑定功能的实现(一):验证码模块 Abp.Zero手机号免密登录验证与号码绑定功能的实现(二):改造Abp默认实现 Abp.Zero手机号免密登录验证与号码绑定功能的实现(三):网页端开发 第三方身份验证在Abp中称之为外部身份验证(ExternalAuthentication),区别于Abp的外部身份授权(ExternalAuth),这里Auth的全称应为Authorization,即授权。 首先来厘清这两个不同的业务在Abp中的实现,我之前写的这篇Abp.Zero搭建第三方登录模块系列文章中描述的业务,即使用的Abp外部身份授权(ExternalAuth)的相关扩展而实现的。还记得我们实现的WeChatAuthProvider吗?它继承于ExternalAuthProviderApi这个抽象类,实现的微信授权功能。所以微信登录这个动作,实际是在授权(Authorization)已有的微信账号,访问服务端资源,而身份验证(Authentica

  • Android线程池使用介绍

    本文主要使用kotlin,讨论Android开发中的线程池用法。 我们想使用线程的时候,可以直接创建子线程并启动 Thread{Log.d("rfDev","rustfishersaid:hello")}.start() 复制 不想每次都创建新的子线程 如果有大量的异步任务,不想每次都创建子线程。有没有什么把子线程统一管理的方法? 遇到这样的情况,我们可以考虑线程池。线程池解决两个问题:需要执行大量异步任务的时候,减轻每个异步任务的调用开销,提高性能。另外它还能够限制和管理子线程。每个ThreadPoolExecutor都维护了一些统计数据,例如已执行的任务数量。 有大量异步任务的时候,可以考虑使用线程池。 预置线程池 代码参考AndroidAPI29 ThreadPoolExecutor提供了很多参数,方便开发者调控。线程池的设计者建议开发者使用以下几个工厂方法,Android中主要有5种 newCachedThreadPool()不限制数量的线程池,能自动回收线程 newFixedThreadPool(intnThreads)固定数量的线程池 newSingleThrea

  • Golang基础知识点整理

    两种执行流程的方式区别 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有go开发环境的机器上,仍然可以运行 如果我们是直接gorungo源代码,那么如果要在另外一个机器上这么运行,也需要go开发环境,否则无法执行 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变大了很多 程序开发注意事项 go源文件以“go”为扩展名 go应用程序的执行入口时main()函数 go语言严格区分大小写 go方法由一条条语句构成,每个语句后不需要分号(go语言会在每行后自动加分号),这也体现出golang的简洁性 go编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则报错 go语言定义的变量或者import的包如果没有使用到,代码不能编译通过 大括号都是成对出现的,缺一不可 程序中"\r"回车的效果 \r回车,从当前行的最前面开始输出,覆盖掉前面相同长度的内容。 例如: fmt.Println("helloword\rhhhhh") 复制 输出: hhhhhword 复制 程序的注释 行注释://块注释:/*注释内容*

  • 如何实现同等间隙的卡片布局

    在列表展示中,经常会使用卡片的内容展示形式,为了美观,常常要求各卡片间的间隙是一致的。 卡片内容不一样可能高度不等,但一般来说为了整体的一致性,会限制每个卡片的宽高都相等。 本文就基于宽高一致的多个卡片,在不同屏幕大小下,每行卡片数量可能有调整,考量如何实现等间隙的布局。 点我预览   放置一张张卡片项,为了设置间距,最常见的就是直接使用一个特定的margin值了,这种方式虽然可以(通过精确计算后确实也可以) 直接设置一个间距,比如统一margin-left和margin-bottom都为20px,并不能保证每行最后一个卡片之后的间距是20px 关于如何定这个margin的值,需要通过一个规则来计算,这个后文再说明   设置同等间距,常用的还有flex布局中的justify-content:space-between,可以定义各子项目以相同间距布局,但不好处理左右子项目与边框的间距。space-around这个就更用不得了,会使得左右子项目右margin==左margin*2 所以最终还是回到使用margin值来设置,通过一个可用的规则,来保证间距是一致的。 &n

  • 为什么我们要使用Async、Await关键字

      前不久,在工作中由于默认(xihuan)使用Async、Await关键字受到了很多质问,所以由此引发这篇博文“为什么我们要用Async/Await关键字”,请听下面分解:   p.p1{margin:0013px;text-align:justify;font:16pxHelvetica;-webkit-text-stroke:#000000} p.p2{margin:0;text-align:justify;text-indent:21px;font:10.5px"TrebuchetMS";-webkit-text-stroke:#000000} p.p3{margin:0;text-align:justify;text-indent:21px;font:10.5px"TrebuchetMS";-webkit-text-stroke:#000000;min-height:12px} p.p4{margin:0;text-align:justify;font:10.5px"TrebuchetMS";-webkit-text-stroke:#000000} p.p

  • 日志——JSON的相关方法

    http://www.cnblogs.com/henryxu/archive/2013/03/10/2952738.html JSON jar包: commons-lang.jar commons-beanutils.jar commons-collections.jar commons-logging.jar  ezmorph.jar json-lib-2.2.2-jdk15.jar 1/** 2*从json数组中得到相应java数组 3*JSONArray下的toArray()方法的使用 4*@paramstr 5*@return 6*/ 7publicstaticObject[]getJsonToArray(Stringstr){ 8JSONArrayjsonArray=JSONArray.fromObject(str); 9returnjsonArray.toArray(); 10} 11 12publicstaticvoidmain(String[]args){ 13JSONArrayjsonStrs=newJSONArray(); 14jsonSt

  • Linux-CentOS 重置root密码

       在使用Linux的过程中有时候会遗失root用户密码,这时我们就可以进入单用户模式来重置root用户密码,下面讲解重置root密码的方式,也是破解root密码的方法。 1、重启服务器,在读秒的时候按任意键,就会出现如下界面 在此界面中按下键盘中的‘e’,从而进入grub模式 2、在1中按下e就会进入到如下界面。 将光标移动到kernel那一行,然后再一次按‘e’,进入kernel该行的编辑界面  3、这就是kernel编辑界面  4、在kernel编辑界面,按一下空格键,然后在后面输入single,同时按下回车键enter退出kernel编辑界面  5、退出kernel界面后会回到grub模式界面,在此界面再次将光标移动到kernel那一行,然后按下‘b’来启动系统 6、这个时候系统就会起来到单用户模式,不需要输入任何密码就可以直接进入系统  7、在单用户模式下,我们就可以直接修改密码  8、修改完毕,重启服务器即进入正常模式

  • unity3d中C#与JS的一些区别

    unity3d目前支持C#和JS两种脚本语言。 学习过程中发现很多教程使用的是JS语言,自己还是用C#比较多,unity原生使用的是Mono,使用C#会更加接近unity的编程思想。 1.方法的定义,C#为强类型语言,所有的类型都必须明确标注;javascript为弱类型语言。 (强弱类型应该不用解释吧(╯‵□′)╯︵┻━┻) StringGetSomething(intarg){ return"Something"; }复制 functionGetSomething(vararg:int){ return"Something"; }复制 2.变量 intisInt; floatisFloat;复制 varisInt:int; varisFloat:float;复制 3.控件获取 GameObject.Find("objectName").GetComponent<Text>();复制 gameObject.Find("objectName").GetComponent(Text);复制  

  • 关于iOS app逆向中修改成NOP指令的。。。

        逆向一程序,发现程序被setuid(0),setgid(0)从而导致程序以root方式运行了(具体可以在iosre中搜索查看),因此我就想把这条指令NOP掉。 网上查了些方法,比如: 1、 0000A0E1                            NOP 我试了下,在32位,即ARM7似乎是movr0r0(两个星期前尝试的了,记得不是很清了。)好吧,这也能实现效果。但在64位下,就变成乱码了,IDA中全变了。   2、用hopper和ida结合来改  在ida里只能直接改十六进制;在hopper里可以直接修改指令-nop,但只能生成另一个可执行文件。 因此,我用hopper直接修改成nop,再分别生成32位和64位可执行

  • 以Append方式打开文件,设置偏移量无效

    1#include<stdio.h> 2 3intmain() 4{ 5FILE*fd=fopen("btoo1.c","ab+"); 6fpos_tp; 7intfp=fgetpos(fd,&p); 8printf("befseek:fgetpos=%ld,ftell=%d\n",p,ftell(fd)); 9fseek(fd,12,SEEK_SET); 10fgetpos(fd,&p); 11printf("befseek:fgetpos=%ld,ftell=%d\n",p,ftell(fd)); 12fwrite("*****",1,5,fd); 13fclose(fd); 14return0; 15}复制   测试代码如上。现象就是这样,原因未知。 解决方案: 设置临时文件,将偏移量前的内容先写到零时文件内,然后删源文件,再将零时文件重命名。   修正: 1#include<stdio.h> 2#include<stdlib.h> 3#include<unistd.h> 4#include

  • IDEA如何创建flutter项目

    (1)新建flutter项目   (2)next以后,开始填项目信息         (3)finish以后,打开项目目录,会是以下界面。     (4)run起来     (5)会自动打开chrome,可以看到以下页面    

  • 小样式

    <html> <head> <metacharset="utf-8"> <title></title> </head> <styletype="text/css"> #container{ position:relative; height:300px; } #tpline{ width:800px; height:44px; position:absolute; left:0; top:0; z-index:2; background:url("http://images.cnblogs.com/cnblogs_com/ohmygirl/623826/o_hline.png")no-repeat; } div.item{ position:absolute; top:22px; width:75px; height:100px; } #it_bm{left:100px;} #it_ext{left:170px;} #it_cfg{left:240px;} #it_uni{left:310px;} #

  • JavaScript学习(三) -- 对象构造器

    1.构造函数  什么是构造函数:在JavaScript中,用 new 关键字来调用的函数,称为构造函数。 它的作用:重复需要使用的属性当做构造函数的参数传递,可以减少大量的重复操作过程。 在使用时,若是new忘记使用,会产生严重的后果。会导致构造函数内部变量变为全局变量。避免的方法,在构造函数内部使用严格模式。当出现报错时,将会终止运行js。此时可以根据报错进行修改调试。 <!DOCTYPEhtml> <html> <head> <metacharset="utf-8"> <title></title> </head> <body> <pid="demo"></p> <script> functionPerson(arg1,arg2) { //'usestrict';在开头处加上这个,就表示是严格模式 this.firstName=arg1; this.lastName=arg2; this.fullName=functi

  • Beta 冲刺(1/7)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta冲鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调组内工作 调试服务器性能 展示GitHub当日代码/文档签入记录(组内共享) 接下来的计划 协助后端实现 还剩下哪些任务 本地服务器配置问题 燃尽图(组内共享) 有哪些困难 服务器迁移难度大 有哪些收获和疑问 CUDA学习 董钧昊 过去两天完成了哪些任务 测试软件bug 调节分类网络算法 完成算法改进思路的拟定 接下来的计划 训练调节后网络 数据增强 还剩下哪些任务 大量数据未标注,无法处理 部分原始数据处理 含有摩尔纹的图片识别困难 有哪些困难 测试评价困难 有效数据量过少,导致泛化程度不佳 有哪些收获和疑问 tensorflow框架学习心得 卢恺翔 过去两天完成了哪些任务 测试软件bug 根据测试结果调整网络参数 协助标注数据 接下来的计划 对调整后网络的模型进行稳定性和正确率测试 推荐算法的实现 还剩下哪些任务 存在部分数据尚未标注

  • KMP---基因改造

    基因改造 (http://oi.nks.edu.cn/zh/Problem/Details/5942) 问题描述 "人类智慧的冰峰,只有萌萌哒的我寂寞地守望。"--TBTB正走在改造人类智慧基因的路上。TB发现人类智慧基因一点也不萌萌哒,导致人类普遍智商过低,为了拯救低智商人群,博爱的TB开始改造人类智慧基因。人类智慧DNA由C种人类智慧脱氧核苷酸构成(这是一种十分特殊的DNA)。 TB智慧DNA片段T长度为M,她可以把另一段长度为M的人类智慧DNA片段S改造成T。 改造过程中,TB可以充分发挥智慧,将任意两种人类智慧脱氧核苷酸交换(比如对于片段S=12321,交换1和2变成S=21312,交换1和4变成42324),可以无限次交换。如果S可以通过若干次交换变成T,那么就称S为"萌萌哒人类基因片段"。 TB想知道对于一个长度为N的人类智慧DNA片段S[1~N],有多少个长度为M的连续子片段S[i~i+M-1],是"萌萌哒人类基因片段",并且这些"萌萌哒人类基因片段"在哪里。 输入格式 第一行包含两个正整数case和C,分别表示数据组数和人类智慧脱氧核苷酸的种数。 接下来3*ca

  • 类型转换

  • 必做作业:mystat实现

    作业要求 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man-k,grep-r的使用 伪代码 产品代码mystate.c,提交码云链接 测试代码,mystat与stat(1)对比,提交截图 完成过程 1.学习stat(1)的截图 使用man1stat进行学习。通过学习知道了stat的作用,用法,参数等。stat主要是用于查询一个文件或路径的信息。 测试使用stat: 2.man-k,grep-r的使用 man-k的使用 要实现stat,我想到是否可以使用系统调用或者现有C函数进行编程,所以使用man-k进行查找搜索。 使用man-kstat|grepfile查找与stat(状态)和file(文件)相关的内容,找到了如下内容。 非常多的内容,其中,我进一步了解名为stat的系统调用。 用man2stat查看学习。 发现通过使用stat系统调用,会返回一个结构体,其中包含了我们需要输出的信息。按理说只要根据文件路径获取到这个结构体,然后再进行格式化输出就可以了。 grep-r的使用 在实现的过程中,会遇到很多不知道的类型和宏定义,需要使用grep

相关推荐

推荐阅读