前言

HTTP:超文本传输协议,是用于从WWW服务器传输超文本到本地浏览器的传输协议。 HTTP协议是一种无状态协议,主要包含请求和相应两大部分。


请求(Request)

get请求示范:

GET http://wthrcdn.etouch.cn/weather_mini?citykey=101070101

请求是我们发送给接口的数据对象,包含接口地址(URL),请求方法,参数,请求头(Headers), Cookies, 数据等 真实抓包一个请求:

请求原始格式-GET(Raw格式:Fiddler抓包得到)

1 GET http://wthrcdn.etouch.cn/weather_mini?citykey=101070101 HTTP/1.1
2 Host: wthrcdn.etouch.cn
3 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:93.0) Gecko/20100101 Firefox/93.0
4 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
5 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
6 Accept-Encoding: gzip, deflate
7 Connection: keep-alive
8 Upgrade-Insecure-Requests: 1
  • 第1行: 请求方法 接口地址 HTTP协议版本
  • 第2-N行:请求headers(如果有Cookie,最后一行为Cookie)
  • 空一行
  • 请求数据(POST等方法使用,此处为空)

POST请求示范:

请求原始格式-POST请求(Raw格式:Fiddler抓包得到)

POST http://openapi.tuling123.com/openapi/api/v2 HTTP/1.1
Content-Type: application/json
cache-control: no-cache
Postman-Token: 1a39439e-61c8-4e59-82a1-736a362c5962
User-Agent: PostmanRuntime/7.2.0
Accept: */*
Host: openapi.tuling123.com
accept-encoding: gzip, deflate
content-length: 468
Connection: keep-alive {
"reqType":0,
"perception": {
"inputText": {
"text": "附近的酒店"
},
"inputImage": {
"url": "imageUrl"
},
"selfInfo": {
"location": {
"city": "北京",
"province": "北京",
"street": "信息路"
}
}
},
"userInfo": {
"apiKey": "ec961279f453459b9248f0aeb6600bbe",
"userId": "206379"
}
}

URL

URL:统一资源定位符,接口的访问地址(包含服务器地址+接口地址)

URL组成格式

协议\\: 服务器地址:端口号\资源路径?参数1=值1&参数2=值2
如:https://www.sojson.com/open/api/weather/json.shtml?city=北京

注意:?号要使用英文?,不能使用中文?

URL编码

URL编码是一种浏览器用来打包请求参数及表单参数的格式, 参数和参数之间使用&分割,非ASCII码使用%加16进制编码替换
如:https://www.sojson.com/open/api/weather/json.shtml?city=北京
编码后为:https://www.sojson.com/open/api/weather/json.shtml?city=%E5%8C%97%E4%BA%AC

链接:URL编码/解码工具(http://tool.chinaz.com/Tools/urlencode.aspx)

请求方法

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体
2 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)数据被包含在请求体中
3 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容
5 DELETE 请求服务器删除指定的页面
6 CONNECT 预留给能够将连接改为管道方式的代理服务器
7 OPTIONS 允许客户端查看服务器的性能
8 TRACE 回显服务器收到的请求,主要用于测试或诊断

GET请求和POST请求的区别

  • GET请求:

    • GET请求可被缓存
    • GET请求保留在浏览器历史记录中
    • GET请求可被收藏为书签
    • GET请求不应在处理敏感数据时使用
    • GET请求有长度限制
    • GET请求只应当用于取回数据
  • POST请求:

    • POST请求不会被缓存
    • POST请求不会保留在浏览器历史记录中
    • POST不能被收藏为书签
    • POST请求对数据长度没有要求

请求参数(URL参数)

如:https://www.sojson.com/open/api/weather/json.shtml?city=北京
  • 中的city=北京,向接口传递一个参数“city”,参数值为“北京”
  • 不同的参数之间用&隔开,非ASCII码参数会自动url encode

请求Headers(请求头)

常见Headers

请求数据(又称为Request Body 或 Data)

请求数据类型(Content-Type)(重点)

  • application/x-www-form-urlencoded: 网页表单格式(默认)
  • application/json:REST接口常用格式
  • text/xml:xml格式,RPC接口,Dubbo接口常用格式
  • test/html: html格式
  • multipart/form-data: 混合表单,支持上传图片

数据编码

  • ASCII码: 单字节,美国信息交换标准码, 包含数字,字母,英文标点及一些控制字符
  • ISO-8859-1:又称Latin1,单字节,向下兼容ASCII,用于支持部分于欧洲使用的语言
  • ANSI编码:单字节表示英文,双字节表示汉字,对ASCII的扩展,不同的国家和地区制定了不同的标准,中文中的GBK,GB2312属于ANSI编码
  • Unicode编码: 采用二个字节编码(英文和中文的字符都以双字节存放),与ANSI码不兼容
  • UTF-8:是目前互联网上使用最广泛的一种Unicode 编码方式,又称万国码

指定请求数据编码(解决中文乱码):
请求Headers设置Content-Type: application/json; charset=utf-8

  • Base64: 一种用64个字符来表示任意二进制数据的方法。

    • Base64编码的作用:由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法。
    • 而且base64特别适合在http,mime协议下快速传输数据。

参考:Base64编码及其作用

响应(Response)

接口返回的信息,包含HTTP状态码,响应头和相应信息

原始相应数据(Raw格式,Fiddler抓包)

Copy
HTTP/1.1 200 OK
Date: Thu, 23 Aug 2018 06:32:26 GMT
Transfer-Encoding: chunked
Connection: keep-alive {"intent":{"actionName":"","code":10005,"intentName":"","parameters":{"lon":"","checkout_date":"2018-08-25","star":"0","city":"北京","days":"1","order":"","price_range":"","nearby_place":"酒店","brand":"","checkin_date":"2018-08-24","place":"信息路","lat":"","needgeo":"0"}},"results":[{"groupType":1,"resultType":"url","values":{"url":"http://m.elong.com/hotel/0101/nlist/#indate=2018-08-24&outdate=2018-08-25&keywords=%E4%BF%A1%E6%81%AF%E8%B7%AF"}},{"groupType":1,"resultType":"text","values":{"text":"亲,已帮你找到相关酒店信息"}}]}

常见的响应格式

  • html
  • json
  • xml

响应编码:有时需要根据不同的编码来正确解析响应内容

HTTP状态码

  • 1** 信息,服务器收到请求,需要请求者继续执行操作
  • 2** 成功,操作被成功接收并处理
  • 3** 重定向,需要进一步的操作以完成请求
  • 4** 客户端错误,请求包含语法错误或无法完成请求
  • 5** 服务器错误,服务器在处理请求的过程中发生了错误

常见HTTP响应码

  • 200: 成功
  • 301/302: 请求重定向到另外一个接口
  • 400: 请求语法错误
  • 403:资源没有访问权限
  • 404:资源不存在(有可能是请求url错误或参数不正确)
  • 405:请求方法不被允许(比如接口只允许Post,使用Get请求接口)
  • 500:服务器内部错误(通常是服务器挂了或接口Bug)
  • 502: 网关失效
  • 504: 网关请求超时

HTTP与HTTPS

HTTP协议传输的数据都是未加密的,HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。
HTTPS和HTTP的区别

  • HTTPS协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  • HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。
  • HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • HTTP的连接很简单,是无状态的;HTTPS协议是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。

Cookie和Session

  • **Cookie/Cookies: **是指某些网站为了辨别用户身份进行session跟踪储存在用户本地终端上的数据(通常经过加密)。
  • Session:服务端为客户端访问所建立和维持的会话,通常会生成一个唯一的id,会话有一定的有效期。
    由于HTTP是无状态的,即服务器不知道用户上一次做了什么,默认也无法识别用户身份。
    比较流行的做法是:
  • 用户访问时服务端建立会话(Session)
  • 将会话id(Session ID)随响应返回,并保存在客户端的Cookies里
  • 后续的访问中,服务器通过辨识,客户端请求时携带的Cookies内容来识别用户


Cookie和Session的区别

  • cookie是存在客户端(浏览器)的进程内存中和客户端所在的机器硬盘上
  • cookie只能能够存储少量文本,大概4K大小
  • cookie是不能在不同浏览器之间共享
  • Session存在服务器端,存在网站进程的内存中
  • Session在初次设置session的时候,会在session池中实例化一个session对象,以sessionid 的值作为key,同时会将key以cookie的形式保存到客户端的内存中
  • Session的作用域只存在当前浏览器的会话中,当浏览器关闭以后就会将sessionid丢失,但是服务器的Session对象要20分钟以后才会回收

授权与加密

常见的接口安全策略:

  1. Session/Cookie机制: 即需要登录,登录后可访问各个接口,最常用的一种策略,适用于内部接口。
  2. 固定appid模式: 用户注册时会生成一个唯一的appid,用户调用接口时需要携带appid,适用于公开接口,安全性较差。
  3. 动态token模式: token即身份令牌,用户访问接口需要使用个人appid临时申请一个token,token有一定有效期,适用于公开接口,安全性较appid模式好。
  4. 开放协议: Basic Auth/ Oauth1.0 / Oauth2.0: 适用于开放接口。
  5. 数字签名: 将所有请求参数及参数值进行排列拼接,加上用户私钥,再进行Md5或其他加密生成一个请求的签名(sign),请求是需要携带签名,服务器收到请求后,会对请求重新计算签名并核实与请求所携带签名是否一致。安全性较高,可以有效防止请求被篡改。适用于内部接口及微服务接口。

常见的加密算法
在接口数据传输过程中常对一些敏感数据(如密码)进行Base64编码或MD5加密,以增加安全性。
加密算法分为对称式加密算法和非对称式加密算法,对称式加解密使用同一个秘钥,非对称式使用不同的秘钥。

  • 对称式加密

    • DES: 数据加密标准,速度较快,适用于加密大量数据的场合
    • AES: 高级加密标准,速度快,安全级别高
  • 非对称式加密
    • RSA: 是一个支持变长密钥的公共密钥算法, 分公钥和私钥,SSH协议使用该算法
    • MD5: 最常用的一种加密方法,是一种摘要算法。

缓存

HTTP 缓存机制作是 web 性能优化的重要手段,当用户第一次请求服务器资源时,服务器将资源缓存到客户端本地,在一定时间内(缓存有效期内)当用户再次向服务器请求同样的资源时,可以直接从缓存中读取,而不用从服务器下载。

接口测试中缓存相关注意点

    • 在更新或调试接口是,注意是否需要清理缓存(或临时禁用缓存)
    • 缓存有一定的有效期
    • 接口性能测试中会关注缓存的命中率

原文:https://i.cnblogs.com/posts/edit;postId=15503917

【Python+postman接口自动化测试】(4)HTTP 协议的更多相关文章

  1. 【Python+postman接口自动化测试】(5)抓包工具Fiddler简介

    Fiddler简介 Fiddler 4.6 下载 http://www.downza.cn/soft/234727.html 为什么使用Fiddler? 可以抓到请求数据,查看Raw格式/表单格式/J ...

  2. 【Python+postman接口自动化测试】(2)什么是接口?

    接口的概念 接口又称API(Application Programming Interface,应用程序编程接口),是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的 ...

  3. 【Python+postman接口自动化测试】(3)什么是接口测试?

    什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换.传递和控制管理过程,以及系统间的相互逻辑依 ...

  4. 【python+postman接口自动化测试】(1)网络基础知识

    一.IP地址 就像每个人都有一个身份证号码 IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址. 查看IP命令: Windows: ipconfig Li ...

  5. 【Python+postman接口自动化测试】(8)以青云客机聊天器人和图灵聊天机器人接口示范python发送get和post

    以青云客机器人和图灵机器人接口示范python发送get和post 发送请求,我们这里主要使用Python的一个第三方包(需要先安装):requests. Python3自带的http.client和 ...

  6. 【Python+postman接口自动化测试】(7)Postman 的使用教程

    Postman v6的使用 Postman: 简单方便的接口调试工具,便于分享和协作.具有接口调试,接口集管理,环境配置,参数化,断言,批量执行,录制接口,Mock Server, 接口文档,接口监控 ...

  7. 【Python+postman接口自动化测试】(6)Chrome开发者工具

    Chrome开发者工具 Elements: HTML元素面板,用于定位查看元素源代码 Console: js控制台面板,js命令行,查看前端日志 Sources: 资源面板,用于断点调试js Netw ...

  8. python+requests接口自动化测试

    转自https://my.oschina.net/u/3041656/blog/820023 原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测 ...

  9. python+requests接口自动化测试框架实例详解

    python+requests接口自动化测试框架实例详解   转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...

随机推荐

  1. P5056-[模板]插头dp

    正题 题目链接:https://www.luogu.com.cn/problem/P5056 题目大意 \(n*m\)的网格,求有多少条回路可以铺满整个棋盘. 解题思路 插头\(dp\)的,写法是按照 ...

  2. GDOI 2021 退役记

    Day -n 时常想自己不学OI会怎样,经常畏惧自己其实没有心里想的那样有能力,去机房来麻痹自己 从 3.21 始加大频率刷题,复习以前都学会,而现在都被抛在脑后的算法 反正都要退役了,成绩也得鲜亮点 ...

  3. 11.2.0.4 RAC manual opatch

    1.Stop the CRS managed resources running from DB homes. If this is a GI Home environment, as the dat ...

  4. 分析你的第一个Android程序

    目录 分析你的第一个Android程序 Android模式的项目结构 切换项目结构模式 Project模式的项目结构 .gradle和idea app build(没有发现这个文件夹) gradle ...

  5. SSM框架项目的mvc拦截器

    为了防止用户在不登录的情况下通过并接请求直接访问系统,我们需要通过session和拦截器来防止这样的情况. 拦截器的配置: 为拦截器建立一个包:interceptor,并在包里建立 LoginInte ...

  6. 基于BootStrap的轮播图

    准备 先设计一个承载轮播图的区域:四周向外阴影.扁平圆角: 1 #myShuffArea{ 2 width: 50%; 3 height: 300px; 4 border: solid 1px gai ...

  7. Perl 编程 基础用法

    Perl 编程 标准头部写法 #!/usr/bin/perl -w # 标准的头部写法,-w意为显示警告 变量 $a=$b+10 # $a和$b都不需要定义,拿过来就用 Note: $flag=0 如 ...

  8. flask 之上传本地图片

    项目配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import os class Config(object): DEBUG = True SQLALCHEMY_DATABA ...

  9. C#与java TCP通道加密通信

    背景说明 公司收费系统需要与银行做实时代收对接,业务协议使用我们收费系统的标准.但是银行要求在业务协议的基础上,使用银行的加密规则. 采用MD5计算报文摘要,保证数据的完整性 采用RSA256对摘要进 ...

  10. 【数据结构与算法Python版学习笔记】图——强连通分支

    互联网 我们关注一下互联网相关的非常巨大图: 由主机通过网线(或无线)连接而形成的图: 以及由网页通过超链接连接而形成的图. 网页形成的图 以网页(URI作为id)为顶点,网页内包含的超链接作为边,可 ...