zoukankan      html  css  js  c++  java
  • python接口自动化12-案例分析(csrfToken)【转载】

    前言:

    有些网站的登录方式跟前面讲的博客园和token登录会不一样,把csrfToken放到cookie里,登录前后cookie是没有任何变化的,这种情况下如何绕过前端的验证码登录呢?

    一、登录前后对比

    1.如果登录页面有图形验证码,这种我们一般都是绕过登录的方式,如下图通过抓包分析,首先不输入密码,抓包

    (由于这个是别人公司内部网站,所以网址不能公开,仅提供解决问题的思路)

    2.在登录页面输入账号和密码手动登录后,抓包信息如下

    3.抓包后cookies信息在登录前后没任何变化,这里主要有三个参数:

    --businessUsername:这个是账号名称
    --JSESSIONID: 这个是一串字符串,主要看这个会不会变(一般有有效期)copy出来就行
    --csrfToken: 这个是一串字符串,主要看这个会不会变(一般有有效期)copy出来就行

    二、get请求

    1.像这种登录方式的get请求,请求头部cookie没任何变化,这种可以直接忽略登录,不用管登录过程,直接发请求就行

    2.代码实现

    # coding:utf-8
    import requests
    # 优惠券列表
    url = 'http://xxx/xxx/coupon/list'
    h = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
    "Accept-Encoding": "gzip, deflate",
    "Cookie": "csrfToken=xxx(复制抓包的信息); JSESSIONID=xxx(复制抓包的信息); businessUsername=(用户名)",
    "Connection": "keep-alive"
    }
    r = requests.get(url, headers=h)
    print r.content

    三、post请求遇到的坑

    1.post请求其实也可以忽略登录的过程,直接抓包把cookie里的三个参数(businessUsername、JSESSIONID、csrfToken)加到头部也是可以的。

    2.但是这里遇到一个坑:用Composer发请求,重定向回到登录页了

    3.主要原因:重定向的请求,cookie参数丢失了

    四、重定向

    1.解决上面问题,其实很简单,把重定向禁用(具体看2.8重定向Location这篇)后的链接获取到,重新发个get请求,头部带上cookies的三个参数就行了

    # coding:utf-8
    import requests
    # 主要是post请求后重定向,cookie丢失,所以回到登录页面了
    # 解决办法,禁止重定向,获取重定向的url后,重新发重定向的url地址请求就行了

    # 三个主要参数
    csrfToken = '获取到的csrftoken,一般有有效期的'
    jsessionId = '获取到的jsessionid'
    userName = '用户名'


    url = 'http://xxx/xxxx/update'
    h1 = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
        "Accept-Encoding": "gzip, deflate",
        "Cookie": "csrfToken=%s; JSESSIONID=%s; businessUsername=%s" % (csrfToken, jsessionId, userName),
        "Connection": "keep-alive",
        "Content-Type": "application/x-www-form-urlencoded",
        "Content-Length": "115"
        }

    body = {"instantMessageId":"56",
            "name": u"哈哈1",
            "order": "",
            "csrfToken": csrfToken,
            "type": "qq",
            "account": "1001"}

    s = requests.session()
    r1 = s.post(url, headers=h1, data=body, allow_redirects=False)
    print r1.status_code
    # 获取重定向的url地址
    redirect_url = r1.headers["Location"]
    print redirect_url

    h2 = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
    "Accept-Encoding": "gzip, deflate",
    "Cookie": "csrfToken=%s; JSESSIONID=%s; businessUsername=%s" % (csrfToken, jsessionId, userName),
    "Connection": "keep-alive"
    }
    r2 = s.get(redirect_url, headers=h2)
    print r2.content

  • 相关阅读:
    day10
    day 9
    day 8
    flex布局
    简单的todolist的demo
    JS中数组与对象的遍历方法实例小结
    css中animation和@keyframes 动画
    form表单相关
    Restful API接口规范
    什么是接口文档,如何写接口,有什么规范?
  • 原文地址:https://www.cnblogs.com/caoj/p/7815789.html
Copyright © 2011-2022 走看看