接口自动化·分享·第二篇·你必须了解的HttpRequest和HttpResponse
完成一个接口调用其实就是完成了一次http请求,所以你必须要清楚一个http请求的组成。
一次完整的请求包含:请求+响应。
一、HttpRequest请求对象
要调用一个接口,首先要准备的是一个请求对象,上一篇代码实现中创建post对象实际就是准备一个HttpRequest类型的对象:
//1.创建post对象,以post方式提交接口请求
HttpPost httpPost = new HttpPost(restUrl);
为什么我们可以把httpPost对象称为请求对象?HttpPost与HttpRequest是什么关系呢,下图给出了二者之间的关系:
由此图可以看出,HttpPost是HttpRequest的实现类,因此它一个HttpRequest类型的请求对象。
HttpPost对象常用api整理:
1) 构造函数:HttpPost httpPost = new HttpPost(url),创建一个请求对象,请求类型为post,url作为参数,设置接口请求地址。
2) httpPost.setURI(URI uri),此中方式也可以设置接口请求的地址。
3) httpPost.addHeader(String name,String value),给一个请求对象添加请求头信息,传达给服务器某些信息,后面会给大家简单的介绍下请求头这个概念。
4) httpPost.setEntity(HttpEntity httpEntity),设置请求提交数据,比如接口参数。
5) ...
HttpGet类型也属于HttpRequest类型,处理get类型的接口调用要用到HttpGet对象,本文不对HttpGet做过多介绍。有相关问题欢迎讨论区发问。
二、HttpResponse响应对象
一个请求只要服务器响应了就会有一个HttpResponse对象产生,此响应对象中会有响应头,状态码,响应数据报文等。
上一个篇章中我们用HttpClient框架技术处理接口调用时,响应对象用的是CloseableHttpResponse类型,这个类型是HttpResponse的子接口,二者的继承关系如下:
CloseableHttpResponse类型对象httpResponse的常用api整理:
1) httpResponse.getFirstHeader(String name):从响应对象里获取指定名字的首个响应头(响应头,传达给客户端的信息)。
2) httpResponse.getStatusLine().getStatusCode():从响应对象中获取状态码,(200:成功,404:找不到资源,500:服务器内部异常...)。
3) httpResponse.getEntity():从响应对象中获取响应数据HttpEntity对象。
4) ...
三、请求头
http协议约定,从客户端发出去的请求都带着请求头,请求头里面的信息是为了告诉服务器关于请求的一些信息,比如:客户端支持的数据类型,支持的字符集,支持的语言环境,想要访问的服务器等等。
以客户端浏览器为例,在浏览器中访问登录接口,我们可以通过浏览器的调试器可以看到此请求相关的请求头,另外整理了几个其他较常见的请求头:
- User-Agent:告诉服务器客户端的相关信息(如果是浏览器会有版本,内核等信息)
- referer:告诉服务器,此请求是从哪个页面上发出来(防盗链)
- X-Requested-With:告诉服务器这个是一个ajax请求
- Cookie:带给服务器的cookie信息
- ...
请求头可以在代码中指定,添加,通过键值对的形式,调用:addHeader(String name,String value)即可在请求对象中添加一个名字为name,值为value的请求头。
四、响应头
类比请求头,服务端的web容器实现了http协议则会在返回头中告诉客户端一些信息,比如:服务器只支持哪种类型的请求,返回的数据长度,数据类型,该怎么样展示等。
仍然以上面浏览器访问登录接口为例,我们在浏览器的调试器中可以看到服务器响应回来的几个响应头信息:
“Set-Cookie”这个响应头的作用是告诉浏览器需要去缓存的cookie数据。如果对于cookie不太明白的同学,可以去我的博客下面看一看这篇文章:https://www.cnblogs.com/nickjiang/p/9148136.html,整理了cookie和session的应用的应用区别。其他几个比较常见的响应头,大家也可以适当了解学习下:
- location:告诉浏览器跳到哪里。
- content-length:告诉浏览器回送数据的长度。
- content-type:告诉浏览器回送数据的类型。
- ...
总结:为什么我们除了请求request和响应response外,还需要去了解请求头,响应头?因为我们后面会从响应头里取数据,往请求头里添加数据,这一块的应用会在后面自动化框架的接口鉴权中得到体现
看完本文,相信你已经对上一篇接口调用的代码实现有了更深一步的理解。
接口自动化·分享·第二篇·你必须了解的HttpRequest和HttpResponse的更多相关文章
- 基于Python的接口自动化实战-基础篇之pymysql模块操作数据库
引言 在进行功能或者接口测试时常常需要通过连接数据库,操作和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操作是否正确等.因此,在进行接口自动化测试时,我们一样绕不开接 ...
- Python自动化 【第二篇】:Python基础-列表、元组、字典
本节内容 模块初识 .pyc简介 数据类型初识 数据运算 列表.元组操作 字符串操作 字典操作 集合操作 字符编码与转码 一.模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库, ...
- 数据库程序接口——JDBC——功能第二篇——数据源之C3P0数据源
综述 C3P0由三部分内容组成.实例化对象,各配置项的含义,以及加载配置项的方式. 实例化对象的方式有三种,第一种方式直接new ComboPooledDataSource,第二种方式使用工厂类Dat ...
- 基于Python的接口自动化实战-基础篇之读写配置文件
引言 在编写接口自动化测试脚本时,有时我们需要在代码中定义变量并给变量固定的赋值.为了统一管理和操作这些固定的变量,咱们一般会将这些固定的变量以一定规则配置到指定的配置文件中,后续需要用到这些变量和变 ...
- java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)
简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...
- python-列表、字典、元组的员工信息处理接口(第二篇(五):基于列表、字典和元组的员工信息处理接口)
Python之旅]第二篇(五):基于列表.字典和元组的员工信息处理接口 python 列表 字典 元组 员工信息处理接口 摘要: 1.基本需求 编写一个查询员工信息表的程序,实现如下功能: ( ...
- 【转载】Android Metro风格的Launcher开发系列第二篇
前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客Android Metro风格的Launcher开发系列第一篇写了如 ...
- 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发
第一部分:微信公众号对接的基本介绍 一.填写服务器配置信息的介绍 登录微信公众平台官网后,进入到公众平台后台管理页面. 选择 公众号基本设置->基本配置 ,点击“修改配置”按钮,填写服务器地址( ...
- Python人工智能第二篇
Python人工智能之路 - 第二篇 : 现成的技术 预备资料: 1.FFmpeg: 链接:https://pan.baidu.com/s/1jonSAa_TG2XuaJEy3iTmHg 密码:w ...
随机推荐
- 递归根据父ID 找所有子类ID
function getinfo($pid){ $str = ''; $row = M('user')->where(array('pid'=>$pid))->select(); i ...
- MAPREDUCE框架结构及核心运行机制
1.2.1 结构 一个完整的mapreduce程序在分布式运行时有三类实例进程: 1.MRAppMaster:负责整个程序的过程调度及状态协调 2.mapTask:负责map阶段的整个数据处理流程 3 ...
- [jQuery]常用正则表达式
验证网址:^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$电子 ...
- 利用Git Bash 远程访问服务器
首先 先在自己的当前主机打开git bash ssh-keygen 生成密钥对 (默认就好,我自己是一直摁着回车的) cat ~/.ssh/id_rsa.pub 查看生成好的公钥,并复制好 打开你远端 ...
- Docker 学习笔记 (一)Dockerfile 创建本地镜像
一.测试环境 OS version: CentOS Linux release 7.5.1804 (Core) docker cluster : master 1 + data node 4 dock ...
- jQuery实现页面回到顶部功能
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Redis 之武林大会 - 哨兵(Sentinel)
前言 Redis在出从复制的模式下,一旦主节点由于故障不能提供服务,需要人工降从节点晋升为主节点,同时还要通知应用方更新主节点的地址,在很多应用场景下,这样的故障处理方式是无法被接受的.不过幸运的是R ...
- Delphi XE7的蓝牙 Bluetooth
Delphi XE7已经内建了蓝牙功能,提供了System.Bluetooth.pas单元 顾名思义,System表示XE7的蓝牙功能可以在Windows,Android,IOS系统内使用 Syste ...
- python的___setattr__魔方方法
___setattr__魔方方法一定要注意防止无限递归当在此方法内部给属性赋值的时候,那会调用此方法,又会重新赋值,无限重复最后要归于super是种解决方法.或者用dict方法. class R ...
- Rails中重写Active Record字段属性
系统重构或升级时偶尔会碰到需要重写某个字段的情况,例如: 1. 读取user的name字段时,实际返回name_new字段 class User < ActiveRecord::Base def ...