接口自动化大牛养成记—第二篇

完成一个接口调用其实就是完成了一次 http 请求,所以你必须要清楚一个 http 请求的组成。

一次完整的请求包含:请求 + 响应。

一、HttpRequest 请求对象

要调用一个接口,首先要准备的是一个请求对象,上一篇代码实现中创建 post 对象实际就是准备一个 HttpRequest 类型的对象:

image.png

为什么我们可以把 httpPost 对象称为请求对象?HttpPost 与 HttpRequest 是什么关系呢,下图给出了二者之间的关系:

image.png

由此图可以看出,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 的子接口,二者的继承关系如下:

image.png

CloseableHttpResponse 类型对象 httpResponse 的常用 API 整理:

  1. httpResponse.getFirstHeader(String name):从响应对象里获取指定名字的首个响应头(响应头,传达给客户端的信息)。

  2. httpResponse.getStatusLine().getStatusCode():从响应对象中获取状态码,(200:成功,404:找不到资源,500:服务器内部异常...)。

  3. httpResponse.getEntity():从响应对象中获取响应数据 HttpEntity 对象。

  4. ...

三、请求头

http 协议约定,从客户端发出去的请求都带着请求头,请求头里面的信息是为了告诉服务器关于请求的一些信息,比如:客户端支持的数据类型,支持的字符集,支持的语言环境,想要访问的服务器等等。

以客户端浏览器为例,在浏览器中访问登录接口,我们可以通过浏览器的调试器可以看到此请求相关的请求头,另外整理了几个其他较常见的请求头:

image.png

1、User-Agent:告诉服务器客户端的相关信息(如果是浏览器会有版本,内核等信息)

2、referer:告诉服务器,此请求是从哪个页面上发出来(防盗链)

3、X-Requested-With:告诉服务器这个是一个 AJAX 请求

4、Cookie:带给服务器的 cookie 信息

5、...

请求头可以在代码中指定,添加,通过键值对的形式,调用:addHeader(String name,String value)即可在请求对象中添加一个名字为 name,值为 value 的请求头。

四、响应头

类比请求头,服务端的 Web 容器实现了 http 协议则会在返回头中告诉客户端一些信息,比如:服务器只支持哪种类型的请求,返回的数据长度,数据类型,该怎么样展示等。

仍然以上面浏览器访问登录接口为例,我们在浏览器的调试器中可以看到服务器响应回来的几个响应头信息:

image.png

“Set-Cookie”这个响应头的作用是告诉浏览器需要去缓存的 cookie 数据。

如果对于 cookie 不太明白的同学,可以去我的博客看一看这篇文章:

https://www.cnblogs.com/nickjiang/p/9148136.html,整理了 cookie 和 session 的应用的应用区别。

其他几个比较常见的响应头,大家也可以适当了解学习下:

1、location:告诉浏览器跳到哪里。

2、content-length:告诉浏览器回送数据的长度。

3、content-type:告诉浏览器回送数据的类型。

4、...

总结:为什么我们除了请求 request 和响应 response 外,还需要去了解请求头,响应头?

因为我们后面会从响应头里取数据,往请求头里添加数据,这一块的应用会在后面自动化框架的接口鉴权中得到体现

看完本文,相信你已经对上一篇接口调用的代码实现有了更深一步的理解。

image.png

今天的分享就到这里了

对此文有疑问?赶紧在留言区留言吧~

回帖
请输入回帖内容 ...