130 位表示想打赏此文章

fiddler抓取网络请求

因本文是ppt转化过来,衔接可能不太连贯,但终会日益完善,感谢垂阅!

网络结构

一般网络可以分为三部分

一、终端(例如:用户、浏览器、APP、服务器~)
二、网络(例如:网卡、路由、代理服务器~)
三、服务器(例如:平台、服务器~)

本节所讲的fiddler就是担任代理服务器的角色

 

fiddler基本设置

8888:fiddler默认代理端口,也可以进行修改
Act as system proxy on startup:fiddler启动后,会将fiddler设置为系统默认代理。
Allow remote computers to connect:开启后能对android、ios手机进行抓包

 

fiddler基本操作

Capturing:点击即可开始/暂停抓包
×:清空已经抓取的报文列表,快捷键ctrl+x
Save:保存已经抓取的报文

 

过滤器

Use Filters:勾选后过滤器内容才能生效。
Actions-Run Filterset now:过滤器的修改实时生效。
Show only traffice from:显示指定进程的报文。选择Remote Process后,可以只显示手机端的报文。
Show only if URL contains:url中含有指定关键字才会显示到列表中。

 

查看区

上方为request,下方为respond。
无论上下方,均有TextView、WebForms、Raw、JSON、XML,可以不同格式查看报文。
TextView非常适用于篡改请求功能。
若respond区出现红框提示,点击即可解码查看。

 

自定义列

默认展示列可能不满足所有人的需求,右键列名提供自定义列功能,可按照个人性进行展示。

 

篡改请求

路径:Rules – automatic breakpoints – before requests / after respond / disabled

 

before request

拦截所有request(从服务器发送的请求)
点击Run to Completion后才可放行
适用于篡改不同入参以调试接口是否符合协议、达到安全性标准

 

after request

拦截所有respond(从服务器返回的响应)
点击Run to Completion后才可放行
适用于模拟接口返回(Mock),临时调试前端页面、解决接口阻塞影响
Mock成本较高,建议做成AutoRespond

    258 位表示想打赏此文章

fiddler抓取https请求

HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。

访问HTTPS站点时,请求、响应都通过TLS协议在浏览器和服务器之间加密传输,并且通过数字证书技术保证数据的保密性和完整性;任何“中间人”、包括代理服务器都只能转发数据,而无法窃听或者篡改数据

要抓取HTTPS流量的明文内容,Fiddler必须解密HTTPS流量。要解密HTTPS流量,则必须加入数字证书

因fiddler默认证书生成器不兼容ipad、android等设备,所以需要使用FiddlerCertMaker来生成证书,下载地址:www.enhanceie.com/dl/FiddlerCertMaker.exe

安装成功后,启动fiddler,检查证书类型。如果是CertEnroll,则为默认证书,请求改为MakeCert,然后重启fiddler

手机端接入fiddler代理地址,以电脑热点为例,广播的ip地址为192.168.137.1,上一篇教程讲到fiddler代理端口为8888。

手机端连上fiddler,但未安装证书情况下,访问https地址,将会出现如下提示:

安装证书在ios上分为三步,android则比较简单,所以这里以ios为例:(下载证书→安装证书→允许证书)

①下载证书:

路径:使用手机浏览器,访问fiddler代理地址,一般为ip:8888。

出现fiddler echo service页面后,点击证书进行下载。

②安装证书:

路径:通用→描述文件。

选择已下载的描述文件进行安装。

③信任证书:

路径:通用→关于本机→证书信任设置。

开启信任即可。

 

 

    313 位表示想打赏此文章

postman的时间日期/时间戳

接口测试时往往需要自定义生成时间、日期、时间戳,网上较多资料是使用math,但我并不建议使用。

postman的sanbox功能(JavaScript的执行环境)支持moment库,在pre-request script和tests中引用moment能方便直观地生成时间、日期和时间戳。详细语法可以参考官网:https://momentjs.com/

moment常见的用法介绍:(假设目前长时间戳为:1561892651418)

moment().format("X") //X:短时间戳
--1561892651
moment().format("x") //x:长时间戳
--1561892651418
moment().format("ss") //ss:秒数
--11
moment().format("SSS") //SSS:毫秒数
--418
moment().format("YYYYMMDD-hhmmss") //hh:12小时制度
--20190630-070411
moment().format("YYYYMMDD-HHmmss") //HH:24小时制
--20190630-190411
  • SSS、YYYY代表3位毫秒数、4位年份。只输入1位S则表示只取第一位毫秒数。
  • 利用此特性,moment().format(“XS”)则表示短时间戳+第一位毫秒数。

实例:(在pre-request script或tests中编辑,假设目前长时间戳为:1561892651418)

//先引用moment库
var moment = require('moment')
//X代表短时间戳,SSS代表毫秒
//X+S ≈ 精确到0.1秒
pm.globals.set("now", moment().format("XS"));
-------------------------------------
全局变量now的值为15618926514
    241 位表示想打赏此文章

postman+newman做自动化测试

一、安装node.js

官网地址:https://nodejs.org/en/

安装完成后,打开cmd(win+R),运行npm -version,顺利提示版本号即安装成功。

二、安装newman

打开cmd(win+R),运行 npm install -g newman

安装完成后,运行 newman –version 校验是否安装成功

三、安装reporter

执行npm install -g newman-reporter-html来全局安装支持Newman生成html报告的组件

这里只列举了html,因为实际使用过程中就html的可读性比较高。

四、newman命令

语法:newman run <collection-file-source> [options]

详情参阅:command_line_integration_with_newman

Options:

Utility:
-h, --help output usage information
-v, --version output the version number

Basic setup:
--folder [folderName] Specify a single folder to run from a collection.
-e, --environment [file|URL] Specify a Postman environment as a JSON [file]
-d, --data [file] Specify a data file to use either json or csv
-g, --globals [file] Specify a Postman globals file as JSON [file]
-n, --iteration-count [number] Define the number of iterations to run

Request options:
--delay-request [number] Specify a delay (in ms) between requests [number]
--timeout-request [number] Specify a request timeout (in ms) for a request

Misc.:
--bail Stops the runner when a test case fails
--silent Disable terminal output
--no-color Disable colored output
-k, --insecure Disable strict ssl
-x, --suppress-exit-code Continue running tests even after a failure, but exit with code=0
--ignore-redirects Disable automatic following of 3XX responses

 

下面细说几个常用的[option]

newman run <collection-file-source>
newman run mycollection.json
newman run https://www.getpostman.com/collections/cb208e7e64056f5294e5

newman是全局命令,打开cmd即可运行。<collection-file-source>可以写绝对路径,或者相对路径。

mycollection.json是从postman导出来的工程,导出方法:

-e, –environment [file|URL]
newman run mycollection.json -e dev.json
newman run mycollection.json --environment test.json

dev.json是从postman导出来的环境变量,导出方法:

需要注意,环境变量或者全局变量,存在两列的值,分别是initial value和current value。current value是你在postman中使用的值,initial value才是你导出值。

-g, –globals [file]
newman run mycollection.json -g globals.json
newman run mycollection.json --globals globals.json

globals.json是从postman导出来的全局变量,导出方法:

在环境变量的底部,会发现有全局变量的入口。在全局变量的底部,有导出按钮。

–reporters cli,html,junit –reporter-html-export <reporter-path>
newman run mycollection.json --reporters cli,html,junit --reporter-html-export result.html

 

 

 

    419 位表示想打赏此文章

http状态码

一、http状态码的作用

二、http状态码的分类

1xx:继续。只是告知一下客户端,服务器当前的状态。现在并不会使用。

2xx:完成。HTTP请求已经被完成,但不代表业务逻辑处理完成。

3xx:重定向。此请求需要进一步由其他代理部件完成。

4xx:客户端可能未按照预期运行,如405请求方式错误,404定位资源错误。

5xx:服务器无法执行(incapable of performing)这个请求,如504网关超时,500服务器内部错误。

三、http状态码的样子

http状态码在F12、fiddler中是长这样的:

但绝对不是这样的:

四、必须熟记的http状态码

200 OK:请求已成功

注意,这个是指http请求已完成

业务层面的代码逻辑(用户名密码错误这类),是不会返回4xx、5xx的。

400 Bad Request:语义有误

这个问题比较好定位,一般是请求体(request body)出现语法错误。

401 Unauthorized:未授权/需要授权

信息头(request head)应该包含一个Authorization信息。

从postman使用中可以了解到,是一个Authorization或者cookie字段。

403 Forbidden:服务器已经理解请求,但是拒绝执行它。

抱歉,暂不能理解这个状态码。

404 Not Found:资源未被在服务器上发现

不解释

405 Method Not Allowed:请求方法不允许

这个好理解,服务器不允许所用的请求方法。

500 Internal Server Error:内部服务器错误

敲黑板,划重点。

官方解释:服务器遇到了一个未曾预料(unexpected )的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。

所谓未曾预料,就是程序员在写代码时,没有对应的try{}catch{}代码,不能捕抓到当前的异常。

如数据库设计某个字段是10长度,代码要插入11长度。此时数据库会往上报一个Error updating database的错误。如果代码层有设计catch对应异常,则会返回一个200的回应给前端,具体报错放在message中;如果代码层没有设计catch对应异常,则会返回一个500的回应给前端,具体报错填满整个接口报文。

502 Bad Gateway:坏网关/网关收到无效回应

这个不是很好理解。当你向A服务器请求一个资源,A服务器要从B服务器获取此资源。但是A从B收到一个无效响应,则返回502。

504 Gateway Timeout:网关超时

续上,A服务器要从B服务器获取资源,限时xx秒。当B服务器xx秒内没有响应,则返回504。

五、根据状态码定位问题方法

200 OK

200只是http请求已完成,所以有时候500异常会因为有对应处理(可以理解成包装),也变成200返回,而具体报错会放在类似图中的message字段中。

图中就是一次底层数据库错误→中间层java处理→前端收到常规json的异常。

404 Not Found

500 Internal Server Error

 

504 Gateway Timeout

初级定位:从返回报文查看日志,看到504字眼,看到超时60s。说明这个“gateway”部件等待了60s,下游系统没有给回任何响应。

进阶定位:查看返回报文看出,这个是Nginx的返回报错,能理解这是请求到达了Nginx,Nginx已经把请求发过去下游系统,但一直没回应。

终极定位:从上面的定位可以知道,问题在于“下游”系统;那么我们就要到对应的服务器,查看日志,找出问题所在。

六、原版 HTTP Status Code Definitions

英文手册:HTTP Status Code Definitions

中文注解:http://tool.oschina.net/commons?type=5

 

感谢各位垂阅!鄙人想综合整理这文章几年了。

 

 

    339 位表示想打赏此文章

Cookie ,Session和Token的区别

Cookie和Session都是会话跟踪技术,Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

本文基本无原创,只摘录重点

一、Cookie :

Cookie 可以翻译为“小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好 XXX,这会让我们感觉很亲切,就好像吃了一个小甜品一样。

cookie生成全过程:

  • 客户端发送一个http请求到服务器端
  • 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
  • 客户端发送一个http请求到服务器端,其中包含Cookie头部
  • 服务器端发送一个http响应到客户端

实例:(敲黑板划重点

会话Cookie和持久Cookie

若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。

若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在浏览器的不同进程间共享。这种称为持久Cookie

 

二、Session:

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。

什么东西可以让你每次请求都把SessionId自动带到服务器呢?显然就是cookie了,如果你想为用户建立一次会话,可以在用户授权成功时给他一个唯一的cookie。

session存放位置:

  • cookie
  • URL地址重写(不常用)
  • 表单隐藏字段(不常用)

“只要关闭浏览器 ,session就消失了?”

不对。对session来说,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。

以上两个是放在http请求的header中,下面说的是放在postbody中。

三、Token

Token是服务端生成的一串随机32位字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

如此说来,token肯定会存在泄露的问题。实际项目中,需要加参数、加时间戳、加盐、加密,在服务端进行校验有效性。

比如request入参为userId、timeStamp、token、appId、sign。前4个是可以通过抓包确定的,而sign=md5(userId+timeStamp+token+appId+SALT)。因为有动态入参timeStamp和私密SALT存在,所以sign基本无法伪造。

大部分参考以下文章:

http://www.cnblogs.com/endlessdream/p/4699273.html

http://www.cnblogs.com/JamesWang1993/p/8593494.html

https://www.cnblogs.com/andy-zhou/p/5360107.html