zoukankan      html  css  js  c++  java
  • 接口测试之postman和charles抓包

    1.接口测试

          ⑴

      cookie:Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。保存时间为3小时。


      session:Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里。Session对象是在客户端第一次请求服务器的时候创建的。Session也是一种key-value的属性对,通过getAttribute(Stringkey)和setAttribute(String key,Objectvalue)方法读写客户状态信息。Servlet里通过request.getSession()方法获取该客户的Session,例如:

    <span style="color:#333333"><code><%@ page language=<span style="color:#a31515">"java"</span> pageEncoding=<span style="color:#a31515">"UTF-8"</span>%>
    <jsp:directive.page <span style="color:#0000ff">import</span>=<span style="color:#a31515">"com.helloweenvsfei.sessionWeb.bean.Person"</span>/>
    <jsp:directive.page <span style="color:#0000ff">import</span>=<span style="color:#a31515">"java.text.SimpleDateFormat"</span>/>
    <jsp:directive.page <span style="color:#0000ff">import</span>=<span style="color:#a31515">"java.text.DateFormat"</span>/>
    <jsp:directive.page <span style="color:#0000ff">import</span>=<span style="color:#a31515">"java.util.Date"</span>/>
    <%!
    DateFormat dateFormat = newSimpleDateFormat(<span style="color:#a31515">"yyyy-MM-dd"</span>); <span style="color:green">// 日期格式化器</span>
    %>
    <%
    response.setCharacterEncoding(<span style="color:#a31515">"UTF-8"</span>); <span style="color:green">// 设置request编码</span>
    Person[] persons =
    {
    <span style="color:green">// 基础数据,保存三个人的信息</span>
    <span style="color:#0000ff">new</span> Person(<span style="color:#a31515">"Liu Jinghua"</span>,<span style="color:#a31515">"password1"</span>, 34, dateFormat.parse
    (<span style="color:#a31515">"1982-01-01"</span>)),
    <span style="color:#0000ff">new</span> Person(<span style="color:#a31515">"Hello Kitty"</span>,<span style="color:#a31515">"hellokitty"</span>, 23, dateFormat.parse
    (<span style="color:#a31515">"1984-02-21"</span>)),
    <span style="color:#0000ff">new</span> Person(<span style="color:#a31515">"Garfield"</span>, <span style="color:#a31515">"garfield_pass"</span>,23, dateFormat.parse
    (<span style="color:#a31515">"1994-09-12"</span>))
    };

    String message = <span style="color:#a31515">""</span>; <span style="color:green">// 要显示的消息</span>

    <span style="color:#0000ff">if</span>(request.getMethod().equals(<span style="color:#a31515">"POST"</span>))
    {
    <span style="color:green">// 如果是POST登录 </span>
    <span style="color:#0000ff">for</span>(Person person :persons)
    {
    <span style="color:green">// 遍历基础数据,验证账号、密码</span>
    <span style="color:green">// 如果用户名正确且密码正确</span>
    <span style="color:#0000ff">if</span>(person.getName().equalsIgnoreCase(request.getParameter(<span style="color:#a31515">"username"</span>))&&person.getPassword().equals(request.getParameter(<span style="color:#a31515">"password"</span>)))
    {
    <span style="color:green">// 登录成功,设置将用户的信息以及登录时间保存到Session</span>
    session.setAttribute(<span style="color:#a31515">"person"</span>, person); <span style="color:green">// 保存登录的Person</span>
    session.setAttribute(<span style="color:#a31515">"loginTime"</span>, <span style="color:#0000ff">new</span> Date()); <span style="color:green">// 保存登录的时间 </span>
    response.sendRedirect(request.getContextPath() + <span style="color:#a31515">"/welcome.jsp"</span>);
    <span style="color:#0000ff">return</span>;
    }
    }
    message = <span style="color:#a31515">"用户名密码不匹配,登录失败。"</span>; <span style="color:green">// 登录失败</span>
    }
    %>
    <!DOCTYPE HTML PUBLIC <span style="color:#a31515">"-//W3C//DTD HTML 4.01Transitional//EN"</span>>
    <html>
    <span style="color:green">// ... HTML代码为一个FORM表单,代码略,请看随书光盘</span>
    </html></code></span>

      ⑵

      get请求

      用来向服务器获取数据

      post请求

      用来向服务器发送数据
      

      url
      请求头
      存放一些额外的信息
      用的是什么浏览器。。
      请求体
      发送的数据

      get请求没有请求体,它的数据是在url里面放的
      get请求不安全,post请求安全一点
      get请求传输的数据没有post请求传输的数据多

    HTTP:

    1xx (临时响应)表示临时响应并需要请求者继续执行操作的状态代码。
    • 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
    • 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
    • 102 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
    2xx (成功)表示成功处理了请求的状态代码。
    • 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
    • 201 (已创建) 请求成功并且服务器创建了新的资源。
    • 202 (已接受) 服务器已接受请求,但尚未处理。
    • 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
    • 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
    • 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
    • 206 (部分内容) 服务器成功处理了部分 GET 请求。
    • 207 由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。
    3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
    • 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (useragent)选择一项操作,或提供操作列表供请求者选择。
    • 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或HEAD请求的响应)时,会自动将请求者转到新位置。
    • 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    • 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
    • 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
    • 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
    • 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    4xx (请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理。
    • 400 (错误请求) 服务器不理解请求的语法。
    • 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
    • 402 该状态码是为了将来可能的需求而预留的。
    • 403 (禁止) 服务器拒绝请求。
    • 404 (未找到) 服务器找不到请求的网页。
    • 405 (方法禁用) 禁用请求中指定的方法。
    • 406 (不接受) 无法使用请求的内容特性响应请求的网页。
    • 407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
    • 408 (请求超时)服务器等候请求时发生超时。
    • 409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
    • 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
    • 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
    • 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
    • 413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
    • 414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。这比较少见,通常的情况包括:本应使用POST方法的表单提交变成了GET方法,导致查询字符串(Query String)过长。
    • 415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
    • 416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
    • 417 (未满足期望值) 服务器未满足”期望”请求标头字段的要求。
    5xx (服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。
    • 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
    • 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
    • 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
    • 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
    • 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
    • 505 (HTTP 版本不受支持)服务器不支持请求中所用的 HTTP 协议版本。

    2.postman

           ①参数化:
      变量参数化{{value}},分隔符用逗号保存,末尾不加分隔符,乱码问题用另存为选择utf-8保存review

      

        注:运行的次数等于参数化脚本里的行数,不会迭代运行

      

      ②(动静)检查点:

     

     

       选择Response body:Contains String 静态检查(pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");});) ;点击Get a variable出现的(pm.variables.get("variable_key");放入静态的pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");});需要检测字符串的括号中。

      ③进准匹配:

      

     

     取result字典中expire-time中的"28800"这个参数

    3.charles抓包使用
       ①设置proxy windows 或者proxy mac

        

       

        ②打断点拦截(Breakpoint)

         

         ③拦截或放行

        

         

        ④修改参数

         

          
          ⑷charles手机抓包(参考链接:https://blog.csdn.net/smalCat/article/details/79817398)

          ①开始对 PC 端 的charles进行配置,点击proxy(代理),找到代理设置

            

            

            对代理端口进行进行配置,端口号默认8888,你可以自己修改,选中 enable transparent http prxying,代表启用http代理;

            点击OK,完后配置。

            如果你只想对pc端的数据交互进行抓取,那么到这一步就行了

            ②对移动端,手机app上面的数据进行抓取

            注意事项:手机与pc是否处于同一网络。

            开始配置:打开手机的WIFI功能区,进入链接WIFI设置界面,点击高级设置,进入以下界面,or 点击代理设置,进入代理设置界面

             

            代理服务器主机名称 填写你PC的IP地址,如果你不知道你PC的ip地址,可以在charles上查看到

            

             本地IP地址,点击local IP Address 后直接就能看到你的PC网络的IP地址。

            端口填写你在charles上设置的端口,如果你没有修改端口,依然是8888,那么直接填入8888;

            点击完成or保存,charles会给你一个提示框,是否允许链接手机网络请求;

            如下:

            

             

            点击允许,ALLOW.

            如果把你点击了否认 Deny,那么你关闭charles,再重新走一遍吧

             

            注:如果没有弹出提示框,那么请检查charles是否处于防火墙信任软件序列里,这个你可以在防火墙设置连看到.

            

            将应用添加进入允许序列里,在不关闭防火墙的情况下,可以抓到数据,如果依然没有,那么久关闭防火墙,再试一次;

            现在,charles就可以抓取手机上的数据了,包括网页、APP、及其他网络请求;甚至某些App网络安全做得不好,你都可以将你的账户和密码在charles上访问到。

             注:这只能对http协议的数据进行抓取.

             ③ 对https的解析,之前我们抓取http协议数据的时候,会发现一个问题,就是只要是https协议,那么全部是上锁了,并不能查看到数据。

              现在,我们来对https解锁,因为https对证书加深了认证,所以我们要解锁,就必须安装charles的变色龙证书,依靠它,我们可以抓取到很多https裹挟的数据。

             

            ④下载证书;点击charles上的help

             

              安装PC端的证书,首先点击install charles root certificate ,会对你进行提示安装证书,点击确定安装

             

              

               

              一定要加入 “ 受信任的根证书颁发机构”,不然后续https解析不了;点击确定,完成PC的安装;

              因为要抓取手机上的https网络请求数据,手机上也必须安装证书;

              首先点击:

              

               会出现获取手机端认证证书网址:

              

               

     

                IOS手机,进入该网址就直接会下载改证书,并且安装它,你直接去设置-》通用-》信任凭证

                找到它,信任它;

                Andiro手机,进入该网址,会提示你下载证书,下载完成后自动安装,名称随你自己定;

                完成安装后

                    因为是https,我们还需要在charles上添加ssl proxy服务

                 

                完成 ssl proxy 设置,五部曲;

                Host:填写你要抓取API网址

                 如:

                

                 

                prot:一般填了host就填写443,手机上不用修改。点击添加,就会对单独的host进行数据解析;

                如果host和port设置为*,则会解析抓取到的所有https请求;

                

                关于charles的抓包和用于app代理的教程写完了;

                

                注:如果你在数据抓取活动完成后,关闭了charles,不再进行数据测试,打开浏览器,发现不能连接到网络,

                   那么,首先你检查你是否处于联网状态,

                 首先检查你是否连网: 

                 

                 关闭你的代理:

                 

  • 相关阅读:
    nested exception is java.io.FileNotFoundException: class path resource [spring-mybatis.xml] cannot be opened
    jdbc批量插入实现大批量数据快速插入
    setInterval设置停止和循环
    在java中使用dom4j解析xml(示例代码)
    获取请求端的ip地址
    行为型之责任链模式
    行为型之策略模式
    行为型之命令模式
    行为型之模板方法模式
    结构型之门面模式
  • 原文地址:https://www.cnblogs.com/shine0824/p/12703282.html
Copyright © 2011-2022 走看看