精华内容
下载资源
问答
  • Fiddler抓包修改接口请求参数方法
    千次阅读
    2020-09-10 13:46:45

    1.fiddler工具左下角空白处点击一次,出现红色昆虫,然后发起请求,fiddler将拦截请求,双击会话,进入inspectors->webforms

    即可以看到body,可以修改key和value,修改后点击Run to Completion(运行到完成)继续发送请求,就完成了拦截请求修改参数再请求的测试

    2.和上面方法相同进行请求拦截,双击会话,进入inspectors->Raw,将对话框中内容全部复制到Composer->Raw中,即可修改参数

    修改完成后点击右上方Execute发送请求

    更多相关内容
  • 网页抓包 首先对于网页爬虫来说怎么抓包呢?很简单,我们直接在网页上右键点击检查或者快捷键 F12 就可以进入开发者调试工具。如果页面是经过请求接口而返回的数据的话,在 Network 中,它就会产生请求的数据,我们...

    网页抓包

    首先对于网页爬虫来说怎么抓包呢?很简单,我们直接在网页上右键点击检查或者快捷键 F12 就可以进入开发者调试工具。如果页面是经过请求接口而返回的数据的话,在 Network 中,它就会产生请求的数据,我们在这里都能捕捉到。

    图片

    我们还是以之前的 P 站为例,我们点开一个接口,这个接口分为两部分,一个是请求的数据,一个是返回的数据,请求的信息主要在 Headers 里面,它主要有以下几部分,第 1 部分,General 里面主要包含了请求的链接 URL 以及他的请求方式,用的多的就是 get 和 post 了,还有请求状态码,200 表示请求接口成功。

    图片

    我们来看一下 Request Headers 请求头的信息,我讲一下请求头里很重要的几个请求参数。

    图片

    第一个是 Cookie,什么是cookie呢?Cookie是网站储存用户的相关的加密数据,这些数据是网站为了识别用户的身份,第一次登录的时候,你的 cookie 信息会被返回并且被网站服务器保存,请求第二个页面的时候,请求信息会带上 cookie,这样网站就能识别用户身份。当然,Cookie储存是有时效的,超过规定的时候后,cookie就失效了,网站会让你重新登录重新获取新的 cookie。所以对于需要登录才能看到数据的网站,请求接口时 cookie 参数是必须要给出的,不然就无法请求数据。

    第 2个 请求参数是:Referer,这个参数是告诉网站服务器,你是从哪个页面跳转过来的,如果这个参数为空或者网址不是服务器白名单的网址,那服务器可能很快就判断你是异常请求或者爬虫了。

    第 3 个比较重要的就是 user-agent,是网站用来检测你的请求是人为的还是真实的浏览器行为,我们加入 user-agent 就是为了模拟成真实的浏览器,从而“骗”过网站服务器,你不加的话,就相当于在你在人家服务器里“裸奔”,你说你在别人家地盘搞颜色,服务器不封你封谁呢?

    最后是 query string parameters,因为我们这个是 get 请求,这些参数也就是请求 url 里问号后面要带的参数,比如上次讲的插画的展示模式 mode,下滑加载的页数 P,这些可以统一把它放在一个元组里。

     params = (
                ('mode', 'rookie'),
                ('content', 'illust'),
                ('p', p),
                ('format', 'json'),
            )
    

    那这些分析出来了之后。那我们就是通过 requests 库来请求接口返回数据了。

    response = requests.get(url, headers=headers, params=params)
    

    你说刚才讲的那些 cookie、user-agent 等信息需要一个个自己拼写转换成 Python 代码格式也是挺繁琐,有没有更快的办法呢?答案是有的,有大佬已经制作的转换的网站了,只需 3 秒就可以搞定这些参数。

    第 1 秒,copy 请求接口的 cURL。

    图片

    第 2 秒,将刚才 copy 的 cURL 粘贴到转换网站,语言选择 Python(默认是Python,还支持其他的语言,共支持 14 种语言)。

    https://curl.trillworks.com/
    

    图片

    第 3 秒,把转换好的 Python requests 复制到编辑器里,headers 和 params 的详细信息都有了,是不是很快,只用 3 秒!

    APP 抓包

    上面分享网页抓包的方法,那怎么抓取 APP 的请求数据呢?这个我们需要下载第三方软件去搞定了,我常用的有 Charles 和 Fiddler 软件,这两款工具主要功能差不多的,任选一款就好,也听说过 Fiddler 比 charles 强大那么一点点,但是我更喜欢 Charles,因为它的界面展示的接口有层级目录感,而 Fiddler 所有接口都是并列的。

    图片

    所以接下来我以 Charles 为例,讲讲 Charles 是怎么抓包的。

    Charles 基础设置

    在开始用 Charles 调试抓取网页或者 APP 前,我们需要对 Charles 做一些基础的设置。首先我们得在 Proxy-Proxy Setting 中设置代理端口号,默认为 8888,一般用默认的就行,除非和电脑上其他端口有冲突,然后勾选下面的容许抓取 HTTP 域名的选项。

    图片

    Charles 抓包网页

    Charles 不仅能抓包 APP,电脑网页也是可以抓取的,下面这张图就是我抓取的 bilibili 动画主页的请求。

    图片

    图片

    抓取电脑网页前,我们只需要把 Proxy 里的 macOS Proxy 选项(Window系统显示的是 Windows Proxy)勾上就可以捕捉网页端的请求了。

    图片

    Charles 下面我们可以用筛选功能让它只显示我们需要抓取的域名就行。

    图片

    Charles 抓包APP

    网页能抓,APP 当然也不在话下,但在抓取前需要做下简单的设置。

    安装证书到移动设备

    首先,我们让手机和电脑要在同一局域网下,先查看下电脑的 IP,Windows 电脑在 cmd 里输入 ipconfig 命令查看 IP,Mac 电脑在终端输入 ifconfig 查看 IP,手机的无线网里设置代理,填上刚查到的 IP 和端口号 8888。

    安卓手机是在长按已连接的 wife,啊呸,wifi,勾上显示高级选项,把代理设置为手动,然后把上面电脑上的 ip 和 Charles 设置的端口号输入到主机名和端口里,点击保存。

    图片

    如果手机是第一次和 Charles 连接,Charles 上会有设备接入弹窗提示,选择 Allow 同意即可。

    图片

    连上之后,我们点击 Help-SSL Proxying-Install Charles Root Certificate on a Mobile Devices or Remote Browser,这时会有个弹窗。

    图片

    弹窗的意思就是让在安卓设备或 ios 设备或安卓模拟器设置好代理后,然后在浏览器里输入 chls.pro/ssl 网址 去下载安装证书。

    图片

    charles 下方还有一段提醒说的是 ios 10 以上的手机安装完证书后,需要在设置-通用-关于本机-证书信任设置,把刚才安装的证书信任下。

    图片

    我这操作的是苹果手机,安卓手机没有信任这一步。

    证书都安装完成后,操作手机上的 APP,就会抓到大量的数据信息了。

    抓取数据显示 unknown 的解决办法

    假如你抓取的全部数据出现 unknown 的情况,比如下面我是打开手机的哔哩哔哩APP,抓取的的全是 unknown。

    图片

    这时我们需要在 Proxy-SSL Proxy Settings ,在 Host 里输入需要抓取的主域名 app.bilibili.com 和端口 443,清空抓取的数据再次打开哔哩哔哩 APP,就能看到抓取的数据了。

    图片

    3秒转换成 Python请求

    还是上面一样方法,3秒直接转换成我们需要的 Python 请求头。

    在接口上右键 copy cURL Request

    图片

    粘贴到转换网站中

    图片

    headers 信息和 cookies 信息就轻松转换过来了。

    Charles 其他功能

    Charles 还有其他的功能,比如模拟网速,这个测试同学可能会经常用到,手机连上 Charles 代理后,在 Proxy-Throttle Settings 中设置不同的网速,可以设置弱网的环境,然后点击 start Throttling 开启,这样就可以测试 APP 在弱网情况下的反应了。

    图片

    对于测试同学来说,Charles 还有个好用的功能:断点。

    什么是断点呢?开发的时候,经常需要对代码进行 debug 断点调试,让程序中断在需要的地方,从而方便其分析。Charles 中的断点功能也是类似的。

    图片

    这个功能主要是在测试过程中,对于有些极端的数字我们无法模拟的情况下,我们给这个接口的主域名上设置断点,修改该接口的请求或者返回信息也就是假传圣旨后再发给服务器。

    图片

    举个例子,比如测试贷款业务,显示贷款金额,比如最大金额是 1 个亿,假如测试中这个数据不好造,但我们需要测试下最大金额时页面显示的情况,是否会被截断或者不显示,这时可以借助断点,改变金额后返回给页面,页面显示的就是你修改之后的数据了。

    最后,断点结束后,记得关闭断点,还有,电脑上的 Charles 抓包工具关闭时,记得将手机上的代理关闭,否则手机会上不了网。

    在这里还是要推荐下我自己建的Python开发交流学习(qq)群:810735403,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和高级开发教程,欢迎进阶中和想深入Python的小伙伴!

    展开全文
  • 在我们做接口测试的时候,经常需要验证发送的消息是否正确,或者在出现问题的时候,查看手机客户端发送给server端的包内容是否正确,就需要用到抓包工具。 常用的抓包工具有fiddler、wireshark、httpwatch、 firebug...

    在我们做接口测试的时候,经常需要验证发送的消息是否正确,或者在出现问题的时候,查看手机客户端发送给server端的包内容是否正确,就需要用到抓包工具。

    常用的抓包工具有fiddler、wireshark、httpwatch、 firebug、F12等。

    抓包抓的是协议,fiddler抓的是HTTP、HTTPS协议,wireshark抓的是其他协议。fiddler、wireshark可以修改接口的参数和返回值,常用的F12调试工具只可以查看接口的参数和响应值。

    一般情况下,做接口测试时,必须有详细的接口文档,接口测试往往伴随着自动化即接口自动化测试,既然有接口文档,就可以直接使用了,为什么要抓包?一直知道fiddler抓包,也抓过包,但是一直不知道为什么要抓包,抓包用来干啥?现在来大概的解释一下:

    1.在不知道接口的情况下

    2.在知道接口,想查看接口数据的情况下

    3.用来查看接口的安全性

    比如:

    web端点击搜索按钮,没有查到数据。F12打开,点击搜索按钮,network中查看具体协议,则可以查看到此接口的参数和返回值。若参数传错,前端的锅;若响应异常,没有调通后台接口;若有响应,响应值错误,后台的锅。

    比如:

    支付订单的时候,fiddler请求前断点,修改5000元为50元,造成数据串改,不安全。用户登录的时候,截取接口查看入参,可以看到具体的用户名、密码,不安全。所以通过fiddler或者F12可以查看接口安全性,做到把敏感数字**显示更安全。

    接下来介绍一下为什么要做接口测试?

    现在的很多接口过分依赖前端界面限制,极大的影响了接口的健全性。比如:某促销商品限购件数最多3件,在界面校验的很正确,但是接口没有做校验,因为接口认为从界面传过来的数据都是正确的,这时候如果某些人绕过界面直接抓到了接口,限购件数改成了30件,接口是可以直接通过了。实际上接口也要做相应的校验。

    抓包是单接口测试,postman是做接口自动化的。Python+request接口自动化测试、Jmeter接口自动化测试。postman基于JS,Jmeter基于java

    接下来我们来介绍一下Fiddler工作原理以及FIdder抓包原理:

    Fiddler工作原理:

    fiddler是以代理web服务器形式工作的,它使用代理地址:127.0.0.1 端口:8888
    

    在这里插入图片描述
    Fiddler 启动的时候,会偷偷地把 Internet 选项中的代理修改为 127.0.0.1,端口:8888。

    当 Fiddler 退出的时候,它会自动在 Internet 选项中取消代理,这样就不会影响别的程序。

    如果 Fiddler 非正常退出,这时候因为 Fiddler 没有自动注销,会造成网页无法访问。

    解决的办法是重新启动 Fiddler。

    Fiddler抓包原理:

    Fiddler为什么能抓包?Fiddler 本质是一个Web代理服务器。它的默认工作端口是8888
    
    我们可以查看Fiddler的工作端口。启动Fiddler,在菜单栏中单击Tools——》fiddler options——》Connections
    

    在这里插入图片描述
    什么是代理服务器:

        Web 代理(Proxy Server)服务器是网络的中间实体。代理位于 Web 客户端和 Web 服 务器之间,扮演“中间人”的角色。
    
        HTTP 的代理服务器既是 Web 服务器又是 Web 客户端。
    

    在这里插入图片描述

    代理服务器是网络信息的中转站,它具有以下功能。

    (1)共享网络。能解决仅仅有一条线路、一个公有 IP 的问题。在公有 IP 资源严重不 足的情况下,可以满足局域网大量用户同时共享上网的需求。

    (2)提高了访问速度。因为大部分的代理服务器都有缓冲功能,可以直接读取, 无须再连接到远程 Web 服务器。这样可以达到加快访问网站的速度、节约通信带宽的 目的。

    (3)突破了访问限制。当访问权限受到限制时,可以使用有权限的代理服务器。

    (4)隐藏身份。内部网的用户要对外发布信息,就需要使用代理服务器的反向代理功 能。这样就不会影响内部网络的安全性能,起到隐藏身份的目的。

    欢迎各位大佬小白加群群里面有很多资料你想要的我都有:656721740

    在这里插入图片描述

    展开全文
  • 参数关联是接口测试和性能测试最为重要的一个步骤,很多接口的请求参数是动态的,并且需要从上一个接口的返回值里面取出来,一般只能用一次就失效了。 最常见的案例就是网站的登录案例,很多网站的登录并不仅仅只传...

    一、前言

    参数关联是接口测试和性能测试最为重要的一个步骤,很多接口的请求参数是动态的,并且需要从上一个接口的返回值里面取出来,一般只能用一次就失效了。
    最常见的案例就是网站的登录案例,很多网站的登录并不仅仅只传username和psw两个参数,往往有其它的动态参数。
    有时候还需要带上cookies参数,如JSESSIONID

    二、登录参数

    首先分析下目标网站【学信网:https://account.chsi.com.cn/passport/login】的登录接口请求参数。
    先随便输入账号和密码,使用chalres工具抓包查看请求参数,用两个参数是网页自动给的参数(用户没输入),特别关注lt

    关闭浏览器后,重复上面操作,再抓包看请求参数,会发现变了

     备注:execution参数是表示网站刷新次数,可以刷新下再登录,就变了 

    三、获取接口返回数据

    我们想登录的话,必须先得到 lt 和 execution 这2个参数,编写函数得到这两个值

    # -*- coding: utf-8 -*-
    
    """
    @author: lucas
    @Function:
    @file: get_it_execution.py
    @time: 2021/10/16 10:45 上午
    """
    import requests
    from lxml import etree
    import urllib3
    
    urllib3.disable_warnings()
    
    s = requests.session()
    
    
    def get_it_execution():
        result = {}
        loginurl = "https://account.chsi.com.cn/passport/login"
        h1 = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
        }
        s.headers.update(h1)
        r = s.get(loginurl, verify=False)
        dom = etree.HTML(r.content.decode("utf-8"))
    
        try:
            result["lt"] = dom.xpath('//input[@name="lt"]')[0].get("value")
            result["execution"] = dom.xpath('//input[@name="execution"]')[0].get("value")
            print(result)
        except:
            print("lt、execution参数获取失败!")
        return result
    
    
    if __name__ == "__main__":
        result = get_it_execution()

    运行结果:

    {'lt': 'LT-217451-dkzeNOshAhPiLR2oNKrVxbW6ZJUtY-cas', 'execution': 'f01b9e46c-53d2-44a0-9af9-92a69cc53443_ZXlKaGJHY2lPaUpJVXpVeE1pSjkuU2l0S056bG5RVVZaUjJ4SVFXSkxVRTFhZVhSaVVrSmFRMFYwV0ZCMVZHeDJlRXMzUlRsbFltSlBabnAzY2tkM1kySlhTR3RJUmpGSlZGaEZWMjFxTnpSak9EUnhkRXB2Y1RKNlVuZzBOa2dyUVZsbmVFRktlRGMyTmprdk9WYzRNa1F3Y2tacEwxWkNaR0p2UVU5UFoweENWV1F5VlhaUFlVTjZMMVIwU2xWcVdqRlFNV1JwUTNkcE5FcDNRVXBHVUUxWFJtNHZabnB5WTBWcWVDOHZjV2t2ZEhGVFRVbGhRWFJKTTBkQ1MycDJORVo1TlN0YVpGcElOWGhNVHpWc01sUktZMkkzUmtScVMwTnNkV3g1TmpSclJXTnZMMmh4VERKdVFsSmxTVk54U0RadVZHRmhaeXRLVlhZeE56TlRSa3hLYVhwaVQxZE5ZVnBvTXpSNlF6WndRMm94YzJGSVQyd3ZVV1J2T0dSVVNEVnJSWEpQZHl0VGFtNTVjblpKUjNkdVFtYzJkSEZaTnpjNVpGbGtWbU53UW1wS00xYzBUbEpxWkRkNk1YSnNLMDVQTDFGc2R6UlFNVzFuTVhnNFRpc3hhMFZFV2sxcFlYTTVZbE5WU2paclFXSjNjbTEyV201eE5tWTBhVWxwT1hOelJuWnFUR0ZNTmtGNlJFZDBlRkJuV0VWSFUycEtPVXRVV0c5aWJIRnpNM0ZLVGpSNU9EVmpjel21OeVRFVXphMGxvTTFJeU1HUjNWM014SzBneVREUkJTQzlUVVhCdFdsRnJSRFV4TVRCWlRUQnRWalpsVkhWdVJYbEJXRUo0TjB4UlVXWlFjV0UyV0V0RU5FbzRZVzlDWldGQ1RsUjRZWGg2TDJOcE5IcGtXRlY1ZW0xbVZVSXJNelV6TDIxSFdIUnZVazlRTml0R0sxY3dZMFI0SzFkSlprdHpiRmRQZFhOeFZGVnpSakl3WjFKUGNqaDBiMjFtYjBGR0sxcGtVVFphY3poWVpqY3haa0V5TmtOSU5tVm9VVEl5UVRabGEzcERhemszYVdWdWNIQkhjRTlhVGtwS056VXJaa056TUVKM05FSndVa2gzTlRCUFVWQmlWekZGYWpsa1dVVlBha3AxT1hobFUxWXZZblk0Ukd0NmFtaEZLMmhHWkZkd1pIZDFhSEExVHk5Q1JVaFJNbmR2Y0VabU9GZ3ljVkJXWW1ZclF6Z3JjQzlPWkhKVE9YQnZjbFZvY0N0WFFXVnRNbE41ZUd4VFJWUnFTV2hLZFZoeWVVeHpNbFJEYkRsbldEbGtMMUJQV0hCSVRFNVFTa0pZY1hWTGRFNDBPRFkwSzFkaWNtOW5iMDFKTWpseWQxRmllVFpUWVdSeU5qZEdaa1FyTlZaTWVYQXJhVXRRUVdWaVptdFVjMG92WVhCM2VEUlZlbTB2U1hCNlNqVlFkVTh6VmpScGVFazBlSHBvVEZKd2RqWlVMelk1VTFGS1QwUlJaRWxHTW5Gck5tczFiRU5pT0hGbU0yNDVRMUZYYjBReU5qbHhOMDE0TVd0aVRqUjVNemxWUzBkVWJ6TkpNbVp2UlU1SVIyUlZOWE5QWVVoRmRVRlhORVF5UVZORFF6aDJlbk5tTkZrM1Z6WnhVMlo2YUZadGJteHpMMmh4YmtJNVExRldaRE51ZEU5V1psaDNhMUpOTlRkeVNYQk9WMDl2VlRkSllVRTBhREJ1ZUVkemF5OHlhV3RtU1ZGbFNGWklVMmRMVUZaaGRuQnpNWEJMVWxKdWJtNUtRV1ZJWm10WlZERkliR2hyWWprNFZETlJTMlF6WW5WcVdsWTBjWE5qUldoeVMwbHZkbU5SUW10S01ITllhREJoYkhWeGNXeENjVlZRWmtJd1dYaHhRemR6YkRWQ1RUQnBSV0V4VkVRNGNITTVaMlpITkhZNU5HcHBWRFZMYWpWRlZ5OU1VWGczUWt4Qk5EaERkV05IY2tSUVZGVTBkRTVRVXlzNGFHNVJOMDEzY0dNNVJITXhhWGxtTjJOUmRYcDNOVXB0Y2tWNWMzRnhaamxpU25kWVVVazVha05uUkc5YU1tdFdOV0ZKWnpSclZHdHhTbFZ6UW5CQlRHWXllblpKTUVoblV6WnNZbEUxTmxCSlZqSTJTMjFtYmxRMlR5c3hSM2xpVlRscldXdHNZa3BFT1VGRU9VSTFNRWN3VjNnM04xTnZVa0ZrVFVsek0zWlpWbXgyTm5OU1IwczNia3BIWjFOWVYwTm5lbFZrT0ROVE1scE5aVTVzV21sYVlTOXdiMGhuYjBOUFpVTktRM0IxY1RGb09YTk9WazU1TDNObU1tVjRaa05uYm1aTU1XTTNjSEJtWW1WWU1FWldNR1JvWm1sSGRtWmxNMlJPZWpaTlZ6TnlaMnR0V0ROSlMzbDZPVXB2ZWxwNllrVlJRazlKWjJOVU5YYzNlR3MzY0d4dGJsRkxiR0ZaU2pGQ1drbGpTbkpYZHpNMk9IZE9iMXBvUTBaa2NWRjVPWHBKYmxOMGNGTjVVVU4wTWk5d2NXVkZSak54TUN0S2RHMW1SSGxzY1dOVmNrdElOMnA2YlV0bWEzWlVNVUVyU1N0TGJGWkNiVk0xU1RSQ01raElRM2hTUlhkelQwSk1VVXhTUVUxbFptdEpUV0p3YW5SeWJYVkpaR0ZETkdSc1NYWlBha2w1ZWtkbmJXZHBWWEZvYzNoaWRGRllTV0ZsUlRjeVJIQXZTVGx2VFhKNWVWZHhjV3RzYUhabWFtaHJNemRUWjNkbU5ISnZMM0ZwWWxoVmEwRkRWRWhwUzBwd1RGcGtaMkZZYTNCR2VXOTZNR1pKUlVJMWFYTlpibWRXVTBFNFJXTk9NRVUwVGs1SmRTc3pTM1pvWVdsMlYxcGhaakp3U2xWd1pYWnRRWFJRU1hJMk0xTjNSRGhsUnk5T1RIQnRTeThyUkRobWQwUkdaMU5MYms5MFltWlJNa1ZvT1d0Mk5uRklkVmhaYjI5SWEzaERTbEJNVVhKUk4yOVlWa0Z2U21Kak4xRm5XVTFTZFhnMFNVMUxhR1l2YkUxWk0zbEVOR2xqUTB3clFYaDNSMWh3VEdGeVlqWmxhME40ZUd0eGFFOTFjbmt2VnpWc1FtRmlRMHR0VkU1cFlVOUxRVkkzYWtWb01WZHNORlZJU3pKcE56UXlkbFZ5THpSWVpWRnpjVVZ2VGxoaWFuVnpZVE00Unl0NlVUQnllWEp0YWsxM1UyY3pkVWN5YVdzcmF6Qm1kbGQwYTAxWk9XRXplWGhXWld4dVpHUkdlVWxtVlcxWEwzQkVaMWt2ZFdkNGNta3hjbTVQWm1ZeVl6TXZZMHNyV1doV0syaFBWazV1TlRabFprOWpVVWRQYkVab1oybG9jVFJJTUZsQlJFZHhXbkJIY201Tk9HVjBMMDlHVDNvMk1Va3lVMHRtU2s4emNHZG5jRVVyVVhsRGJWaFdXRXNyTUZkb1puWnZMMnN5UTFaNU9IcENjazByTkVGVE1IbHpNbWRVZEVkak4zZE5aRXhGUjJScVYxY3dhM2M5UFEuUENtRGR6YUMwMVJCRExOR2VHUEZYbDhFWHRfeTJQbmJheUlhWTdZYlMxR2x4Q1dIbUlmTzVWaVUxcFhRcHZ0MjFRdk52RlF2a3pZWUY1OGRFaHgzTFE='}

    四、JSESSIONID

    登录里面实际上会有一个非常重要的cookies参数JSESSIONID,这个JSESSIONID也是动态的,每次重新打开页面都会变。

    这个参数也是第一次访问登录页面时候,服务器会自动返回过来的,使用浏览器无痕模式首次访问就能抓取到了。

    cookies参数关联实现就非常简单了,直接用requests.session()去发个get请求就能自动保存了,所以上一步get_it_execution()实际上也同步了cookies参数。

    五、参考代码 

    # -*- coding: utf-8 -*-
    
    """
    @author: lucas
    @Function:
    @file: get_it_execution.py
    @time: 2021/10/16 10:45 上午
    """
    import requests
    from lxml import etree
    import urllib3
    
    urllib3.disable_warnings()
    
    s = requests.session()
    
    
    def get_it_execution():
        result = {}
        loginurl = "https://account.chsi.com.cn/passport/login"
        h1 = {
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
        }
        s.headers.update(h1)
        r = s.get(loginurl, verify=False)
        dom = etree.HTML(r.content.decode("utf-8"))
    
        try:
            result["lt"] = dom.xpath('//input[@name="lt"]')[0].get("value")
            result["execution"] = dom.xpath('//input[@name="execution"]')[0].get("value")
            print(result)
        except:
            print("lt、execution参数获取失败!")
        return result
    
    
    def login(result, user='13812348888', psw='123456'):
        loginurl = "https://account.chsi.com.cn/passport/login"
        h2 = {
            "Referer": loginurl,
            "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
            "Origin": "https://account.chsi.com.cn",
            "Content-Length": "4157",
            "Cache-Control": "max-age=0",
            "Upgrade-Insecure-Requests": "1",
            "Content-Type": "application/x-www-form-urlencoded"
        }
        body = {
            "username": user,
            "password": psw,
            "rememberMe": "true",
            "lt": result["lt"],
            "execution": result["execution"],
            "_eventId": "submit"
        }
        s.headers.update(h2)
        r4 = s.post(loginurl, data=body, verify=False)
        print(r4.text)
    
    
    if __name__ == "__main__":
        result = get_it_execution()
        login(result, user='testUser', psw='xxxxx')
    

    运行结果:(返回登录后的一个页面):

    
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>
        
            查看个人信息_学信网
        
        </title>
        <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <link rel="icon" href="https://t1.chei.com.cn/account/favicon.ico" type="image/x-icon" />
        <link href="https://t1.chei.com.cn/common/ch/iconfont.css" rel="stylesheet"/>
        <link rel="stylesheet" type="text/css" href="https://t1.chei.com.cn/common/plugins/dialog/6.0.5/css/ui-dialog.css">
        <link rel="stylesheet" href="https://t1.chei.com.cn/common/js/poshytip/tip-yellow/tip-yellow.css" media="screen" />
        <link rel="stylesheet" href='https://t3.chei.com.cn/account/css/custom/account-1.0.4.css?20210805'>
        
        <script src="https://t1.chei.com.cn/common/jquery/1.9.1/jquery.min.js"></script>
        <script src="https://t1.chei.com.cn/common/plugins/validation/jquery.validate.min.js"></script>
        <script src="https://t4.chei.com.cn/account/js/account/jqueryloading-1.0.3.js"></script>
        <script src='https://t3.chei.com.cn/account/js/common/wap.js'></script>
        <script>
            if(wapFn()){
                addFile('css','https://t2.chei.com.cn/account/css/custom/account-wap-1.0.5.css?20210709');
            }
        </script>
        <script src="https://t1.chei.com.cn/common/js/poshytip/jquery.poshytip.min.js"></script>
        
    <script>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
        ga('create', 'UA-100524-4', {'sampleRate': 1});
        ga('send', 'pageview');
    </script>
    
    </head>
    <body>
    <div class="outer-layer">
        <div class="outer-layer-content">
            
    
    
    
    
    
    
    <div class="header">
        <div class="wrap1180 clearfix">
            <a href="https://www.chsi.com.cn/" target="_blank"><div class="logo"></div></a>
            <div class="location"></div>
            <div class="user-info">
                
                    您好,<span class="username"><a href="https://account.chsi.com.cn/account/account!show" target='_blank'>xxxxxxxx5</a></span>|&ensp;
                    
                    <a href="#" onclick='logoutFn(event);'>退出</a>
                    <script type='text/javascript'>
                       function logoutFn(event){ 
                        var content = '<div style="text-align:left;"><div style="margin: 16px 0 10px 0;">确定要退出吗?</div><span class="color-red">退出后,出于安全考虑,请关闭您的浏览器!</span><div>';
                            dialog({
                                title: '提示',
                                content: content,
                                button: [
                                    {
                                        value: '确定',
                                        autofocus: true,
                                        callback: function (){
                                            window.location.href='https://account.chsi.com.cn/passport/logout';
                                        }
                                    },
                                    {
                                        value: '取消',
                                        callback: function (){
    
                                        }
                                    }
                                ]
                            }).showModal();
                        };
                    </script>
                
                
            </div>
        </div>
    </div>
    <div class="header-wap clearfix">
        <a class="logo-wap" href="https://www.chsi.com.cn/"></a>
        <i class="iconfont wap-menu-icon">&#xe69b;</i>
        
    </div>
    <div class="header-mask-wap"></div>
    <div class="header-menu-wap">
        <i class="iconfont close-btn-wap">&#xe65c;</i>
        <ul class="header-menu-list-wap">
            <li>
                <a href="https://my.chsi.com.cn/archive/index.jsp">
                    <span class="menu-txt">学信档案</span>
                    <i class="iconfont">&#xe222;</i>
                </a>
            </li>
            <li>
                <a href="https://yz.chsi.com.cn/user/">
                    <span class="menu-txt">研究生招生</span>
                    <i class="iconfont">&#xe222;</i>
                </a>
            </li>
            <li>
                <a href="https://www.gfbzb.gov.cn/">
                    <span class="menu-txt">征兵报名</span>
                    <i class="iconfont">&#xe222;</i>
                </a>
            </li>
            <li>
                <a href="https://gaokao.chsi.com.cn/zzbm/stu/?trnd=281274028969571111111111111">
                    <span class="menu-txt">特殊类型招生</span>
                    <i class="iconfont">&#xe601;</i>
                </a>
            </li>
            <li>
                <a href="https://www.gatzs.com.cn/yzbm/student/?trnd=281274028969571111111111111">
                    <span class="menu-txt">港澳台研究生招生</span>
                    <i class="iconfont">&#xe601;</i>
                </a>
            </li>
            <li>
                <a href="https://cy.ncss.cn/">
                    <span class="menu-txt">大创网</span>
                    <i class="iconfont">&#xe601;</i>
                </a>
            </li>
        </ul>
    </div>
    <script>
    $(function(){
        var title = $('title').text();
        title = title.substring(0,title.indexOf('_'));
        $('.header').find('.location').text(title);
    
        $(".wap-menu-icon").click(function (){
            $(".header-mask-wap, .header-menu-wap").show();
            $('body').css('overflow','hidden');
        });
        $(".close-btn-wap, .header-mask-wap").click(function (){
            $(".header-mask-wap, .header-menu-wap").hide();
            $('body').css('overflow','auto');
        });
    })    
    </script>
    
            
                <div class="menu-t-wap">
                    <a class="menu-item" id="zhxx" href="/account/account!show">
                        账号信息
                    </a>
                    <a class="menu-item" id="jbzh" href="/account/sns/unbind/unbind.action">
                        解绑账号
                    </a>
                    <a class="menu-item" id="dlrz" href="/account/prequeryloginlog.action">
                        登录日志
                    </a>
                </div>
            
            
            
            
    
    
    
    
    
    <style>
        .agree-box{ text-align: center; }
        .agree-box .agree-btn{ padding: 0 20px; background: #2eafbb; border: 1px solid #248992; border-radius: 4px; color: #fff; height: 30px; cursor: pointer; }
        .agree-box .agree-btn:hover{ opacity: .8; }
        .agree-btn[disabled]{
            color: #c5c8ce; background-color: #f7f7f7; border-color: #dcdee2; cursor: not-allowed;
        }
        .agree-box .back-btn{ color: #333; }
        .agree-box .back-btn:hover{ color: #1866c8; text-decoration: none; }
        .xxwxy-checkbox{
            margin-bottom: 10px;
        }
        .xxwxy-checkbox label{
            cursor: pointer;
        }
        .xxwxy-checkbox input[type=checkbox]{
            margin-bottom: 3px;
        }
        .help-content .color-blue {
          color: #1866C8;
          cursor: pointer;
          font-size: 14px;
        }
        .help-content h5{
          padding: 10px 0;
          font-size: 16px;
        }
        .yszc-box h4 {
          font-size: 20px;
          padding: 10px 0 20px;
        }
    </style>
    <h1>学信网账号-阅读协议</h1>
    <div class="zhsz-container clearfix">
        <div class="right-box" style="width: 100%; box-sizing: border-box;">
            <h2>学信网用户协议</h2>
            <div class="help-content"></div>
    
            <div class="yszc-container" style="display: none;">
                <div class="yszc-box"></div>
            </div>
            
            <div class="agree-box">
                <div class="xxwxy-checkbox">
                    <label for="xxwxy">
                        <input type="checkbox" id="xxwxy" checked="checked"> 我已阅读并同意学信网协议
                    </label>
                </div>
                <input type="button" value="确定" data-flag="1" class="agree-btn">&ensp;&ensp;&ensp;&ensp;
                <a href="/passport/logout" class="back-btn">返回</a>
            </div>
            
        </div>
    </div>
    <script src="https://t2.chei.com.cn/common/fwxy/app-1.0.2.js"></script>
    <script>
        $(function(){
            $(".location").text("学信网用户协议");
            $('.help-content').html(chsiFwtk);
            $('.yszc-box').html(chsiYszc);
    
            $('.agree-btn').on('click', function () {
                if ($(this).attr('data-flag') === '1') {
                    window.location.href = "/account/rck/agree.action";
                } else {
                    return false;
                }
            });
    
            $("#xxwxy").on('click', function () {
                var $this = $(this);
                if ($this.is(":checked")) {
                    $(".agree-btn").attr("data-flag", "1").removeAttr("disabled");
                } else {
                    $(".agree-btn").attr({"data-flag": "0", "disabled": "disabled"});
                }
            })
    
            var yszcContent = $('.yszc-container').html();
    
            $('#yszc').on('click', function () {
                dialog({
                    title: '',
                    content: yszcContent,
                    button: [
                        {
                            value: "关闭",
                            callback: function (){
                                this.close();
                            }
                        }
                    ]
                }).showModal();
            });
        })
    </script>
    
            
                <div class="menu-wap">
                    <a href="javascript:;" onclick='logoutFn(event);' class="logout-btn">
                        退出
                    </a>
                </div>
            
            
        </div>
    </div>
    <div class="outer-footer">
        
    
    
    
    
    
    
    
    
    
    
     
        <a href="https://www.chsi.com.cn/" target="_blank">学信网</a>  
        <a href="https://account.chsi.com.cn/account/help/index.jsp" target="_blank">帮助中心</a>  
        <a href="https://www.chsi.com.cn/about/contact.shtml" target="_blank">联系我们</a>  
        <span class="wap-show"><br></span>
        Copyright © 2003-2021 学信网 All Rights Reserved&ensp;&ensp;
    
    
    
    
    
    
    
    
    
    <form class="site-utility-footer-language" id="setlang" action="/account/setlang.action" method="post" style="display:inline">
        <input type="hidden" name="next" value="">
        <select class="site-utility-footer-language-select" name="request_locale">
        
            <option value ="zh_CN" selected="selected">简体中文</option>
            <option value ="en_US">English</option>
        
        </select>
    </form>
    <script type="text/JavaScript">
    $("select.site-utility-footer-language-select").change(function(){
        var request_locale = $(this).val();
        if(request_locale != "zh_CN" && request_locale != "en_US"){
            request_locale = "zh_CN"
        }
        var location = "";
        var from = '';
        
            location = "";
        
        if(""==location){
            $(".site-utility-footer-language").submit();
        }else{
            window.location=location;
        }
    });
    </script>
    </div>
    <script src="https://t1.chei.com.cn/common/plugins/dialog/6.0.5/dialog-min.js"></script>
    <script src='https://t2.chei.com.cn/account/js/common/ie-prompt.min.js'></script>
    <script src='https://t4.chei.com.cn/account/js/cltfp-0.1.min.js'></script>
    <script>
    $(function (){
        if (!wapFn()) {
            intialViewHeight();
        } else {
            var locationStr = window.location.href;
            if (locationStr.indexOf("account!show") > -1 || locationStr.indexOf("account!editpwdanswer") > -1) {
                $("#zhxx").addClass("active").siblings(".menu-item").removeClass("active");
            } else if (locationStr.indexOf("unbind/unbind") > -1) {
                $("#jbzh").addClass("active").siblings(".menu-item").removeClass("active");
            } else if (locationStr.indexOf("prequeryloginlog") > -1 || locationStr.indexOf("queryloginlog") > -1) {
                $("#dlrz").addClass("active").siblings(".menu-item").removeClass("active");
            }
        }
    });
    /**
     * 初始化账号信息左右菜单高度
     * @author jiaxd 20180404
     */
    function intialViewHeight(){
        if( $(".left-box").length > 0 ){
            var leftHeight = $(".left-box").height() - 40,
                rightHeight = $(".right-box").height();
            if( leftHeight > rightHeight ){
                $(".right-box").height(leftHeight);
            }else if( rightHeight > leftHeight ){
                $(".left-box").height(rightHeight + 20);
            }
        }else{
            return false;
        }
    }
    </script>
    </body>
    </html>
    

    展开全文
  • 最近,我在公司做这样的一个事情,整理老旧的api服务,需要统计接口的每个请求的ip和请求参数,找出对应的调用的ip,以便通知业务方修改为新的api服务。其中我们的这个api服务调用有分为thrift调用和http调用,由于...
  • 基于http协议的抓包工具,现在大部分接口都是基于HTTP协议开发 获取接口的详细的信息(http协议请求的头信息,请求的体信息,响应头信息,响应体信息) 获取相关参数的信息(参数放在哪(URL(query string),...
  • 接口文档,一般开发应该给到测试人员的。...2.当开发无法提供接口文档时,那我们测试只能自己去看接口,这里就可以用到抓包。 测试web端的话,1.如果抓到的包是http协议,那就直接下载fiddler软件即可。 2.如果
  • 接口抓包3. 参数解密过程4. 解密方法整理重构5. 脚本实现6. 总结 1. 工具 Fiddler 抓包工具 手机(与PC统一局域网) Chrome浏览器 Postman 2. 接口抓包 打开fiddler软件,在Tools > Options 按以下设置: ...
  • 通过FIDDLER抓包或者F12或者接口文档获取对应接口信息,以WEB登录为例 将抓包信息,通过postman验证是否正确: 分析这是POST请求: 获取请求参数 分析结果在POSTMAN进行设置 请求头的设置,这里注意,...
  • 这里出现的名词,其实都是差不多的意思啊,这都跟抓包这个词有关,说到抓包呢我们今天就先来了解一下抓包的一些基础定义跟抓包工具Fiddler的使用跟安装吧。 本篇文章,博主只想使用通俗易懂的话语,让大家明白...
  • 用手机访问目标网页 我们用手机访问微信公众号【深圳x出行】进入到抢票页面后,发现 Charles已经成功抓包到了网页信息,当我们进入这个抢票页面的时候,他会发起两个请求,一个是获取document文档内容,一个post...
  • 3.接口信息收取工具:fiddler抓包工具、浏览器开发者工具(f12)等。 【P.S. fiddler下载地址:https://www.telerik.com/fiddler​www.telerik.com apipost下载地址:官网www.apipost.cn】 二、web接口测试需要...
  • tcpdump抓包工具各参数详解

    千次阅读 2017-07-19 16:10:29
    tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root
  • 1.使用RSA加密算法。...3.如果黑客可以猜到接口参数,那么我们可以给参数MD5加密,甚至加盐。 4.防止未登录访问,可以加token. 5.不需要多次调用一个方法取token,可以加cookie. 注: swagger集成springboot可...
  • 接口协议抓包与分析

    2021-12-03 00:59:32
    JavaScript 交互 Sources:源代码面板,可以设置断点调试 JavaScript Network:网络面板,用于 web 抓包,记录了每条网络操作的相关信息 Performance:录制页面性能数据 Memory:排查代码内存分配问题 Application:...
  • 接口测试 抓包 fiddler chrome
  • 接口抓包测试

    2020-11-30 21:38:55
    包括接口地址,传入参数和返回参数 可以简单理解为:当需要访问某些数据,正常状态下传入合格参数,会收到该数据范围内的返回参数 场景:在美团旅游频道,用户选定时间、地点后搜索航班,后台会调用搜索接口传入时间...
  • Charles抓包

    2021-05-17 16:15:25
    选中需要返回404/403的接口,点击【ok】 再次请求效果如下(接口返回404) 4.5:屏蔽web网页抓包信息 应用场景:屏蔽web网页抓包信息 proxy–>windows proxy(前面没有对勾,就不会抓到 PC浏览器的包) proxy–>...
  • 浏览器抓包使用方法介绍

    千次阅读 2021-04-15 15:44:28
    一、浏览器抓包使用方法介绍 1、新建隐身窗口 浏览器中直接打开网站,会自动带上之前网站时保存的cookie,但是在爬虫中首次获取页面是没有携带cookie的,这种情况如何解决呢? 使用隐身窗口(无痕模式),首次打开...
  • eg:输入了错误的URL 500 Internal Server Error:服务器发生不可预期的错误 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常 五、Fiddler抓包解析 1、使用fiddler抓包后,会话...
  • Charles抓包工具使用以及抓取API接口

    万次阅读 2017-09-18 15:48:32
    抓包(Packet Capture),实际上就是对网络请求(包括发送与接收)的数据包进行截获、重发、编辑、转存等操作,在Android下,也经常被用来进行数据截取等。学会抓包之后,获取某个App的API就是轻而易举的事了,当然...
  • 接口抓包测试总结

    2020-11-30 20:22:18
    接口抓包测试工具Charles Charles是一款Http代理服务器和Http监视器,当移动端在无线网连接中按要求设置好代理服务器, 使所有对网络的请求都经过Charles客户端来转发时,Charles可 以监控这个客户端各个程序所有...
  • 3.接口信息收取工具:fiddler抓包工具、浏览器开发者工具(f12)等 二、web接口测试需要获取的东西 web接口测试需要知道的三个条件 1.请求方式:get、post、put、patch、delete等 2.url地址:分为http请求和https是...
  • 使用Charles抓包

    千次阅读 2021-01-17 11:14:05
    使用Charles抓包Charles抓包Charles是一个HTTP代理服务器/HTTP监视器/反转代理服务器。...1、配置抓包环境1)下载Charles2)安装Charles下载完毕之后,直接进行安装即可正常使用(ps:不注册的话,每次使用3...
  • 我的一个测试朋友在几个公司都有接触过接口测试,每个公司的接口测试需求都差不多。但是,项目的大小会影响接口测试任务的简繁。所以刚好今天来分享一波。 涉及到TCP协议的接口,也涉及到http协议的接口。 前段...
  • 2.2 不允许抓包 软件开发商并不希望自己的软件被人抓包抓包意味着自己的接口全部被人看得一清二楚,存在很多安全隐患。有很多App采取各种措施来防止被抓包。 2.2.1 某些App抓不到包 某些App为了不被抓包,直接...
  • HTTPS 抓包

    2020-08-05 11:49:51
    要防止被抓包,需要采用应用级的安全防护,例如采用私有的对称加密,同时做好移动端的防反编译加固,防止本地算法被破解。 总结 以下用简短的Q&A形式进行全文总结: Q: HTTPS 为什么安全? A: 因为 HTTPS 保证了...
  • 如何通过抓包来获取数据API

    万次阅读 多人点赞 2019-03-22 15:28:09
    写了一个猫眼电影小程序,数据是通过抓包获取的,开始以为抓包很简单就没说明,结果有很多人问如何获取猫眼电影数据,这里就写了一篇博客说明。 通过谷歌浏览器的调试工具可以抓取任意网站的包,这里以猫眼电影为例...
  • 在测试过程偶尔会用到fiddler抓包来测试前端的显示功能,之前看过大佬们写的教程,都比较高大上,但是少了详细步骤,楼主自己摸索了一会,终于成功。下面给大家分享一下经验,史上最小白的步骤教程来了!!!!! ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,314
精华内容 4,525
关键字:

网页抓包接口参数是哪里?