装好爱快虚拟机后,可以把此虚拟机的其中一张虚拟网卡和电脑及其它虚拟机设置共组一个局域内网。
方法为在虚拟机设置中把这张网卡设置为“仅主机”,然后启动爱快,把这张网卡绑定一个lan口,把IP设置为192.168.80.1,然后进主机系统的网卡设置,把虚拟的Vnet1这个网卡的IP地址设置为192.168.80.2,此时在电脑主机中访问192.168.80.1应该能访问到爱快路由界面了。
装好爱快虚拟机后,可以把此虚拟机的其中一张虚拟网卡和电脑及其它虚拟机设置共组一个局域内网。
方法为在虚拟机设置中把这张网卡设置为“仅主机”,然后启动爱快,把这张网卡绑定一个lan口,把IP设置为192.168.80.1,然后进主机系统的网卡设置,把虚拟的Vnet1这个网卡的IP地址设置为192.168.80.2,此时在电脑主机中访问192.168.80.1应该能访问到爱快路由界面了。
之前找一个被cloudflare加速过的直播,要找他的m3u8地址,那么可以根据fiddler来看到直播的m3u8地址,然后看这个地址里的一串字母,然后用find,在find里把match case,secrch binaries,decode compressed content,select matches,unmark old results等都点上,再查找,最后在之前页面返回响应的syntaxview选项卡里找到m3u8链接,之前因为没有在上面选decode,所以这里面是乱码。
1、Trunk口,Trunk口上可以同时传送多个VLAN的包,一般用于交换机之间的链接。
2、Hybrid口,Hybrid口上可以同时传送多个VLAN的包,一般用于交换机之间的链接或交换机于服务器的链 接。
3、Access口,Access口只能属于1个VLAN,一般用于连接计算机的端口。
4、Tag和Untag,tag是指vlan的标签,即vlan的id,用于指名数据包属于那个vlan,untag指数据包不属于任何vlan,没有vlan标记。
5、PVID即 Port Vlan id,代表端口的缺省VLAN。交换机从对端设备收到的帧有可能是不带VLAN标签的数据帧,但所有以太网帧在交换机中都是以带VLAN标签的形式来被处理和转发的,因此交换机必须给端口收到的不带VLAN标签的数据帧添加上VLAN标签。为了实现此目的,必须为交换机配置端口的缺省VLAN。当该端口收到不带VLAN标签的数据帧时,交换机将给它加上该缺省VLAN的VLAN标签。通俗的讲,指的是native Vlan,即不打Vlan标记的Vlan,一般默认为Vlan 1
Port-base VLAN ID,是表示网络通信中基于端口的VLAN ID,一个端口可以属于多个VLAN,但是只能有一个PVID,收到一个不带tag头的数据包时,会打上PVID所表示的VLAN号,视同该VLAN的数据包处理。一个物理端口只能拥有一个PVID,当一个物理端口拥有了一个PVID的时候,必定会拥有和PVID相等的VID,而且在这个VID上,这个物理端口必定是Untagged Port。PVID的作用只是在交换机从外部接受到可以接受Untagged 数据帧的时候给数据帧添加TAG标记用的,在交换机内部转发数据的时候PVID不起任何作用。
二、端口的Tag和Untag
若某一端口在vlan设定中被指定为非标记端口untagged port, 所有从此端口转发出的数据包上都没有标记 (untagged)。若有标记的数据包进入交换机,则其经过非标记端口时,标记将被去除。因为目前众多设备并不支持标记数据包,其也无法识别标记数据包,因此,需要将与其连接的端口设定为非标记。
若某一端口在vlan设定中被指定为标记端口tagged port, 所有从此端口转发出的数据包上都将有标记 (tagged)。若有非标记的数据包进入交换机,则其经过标记端口时,标记将被加上。此时,其将使用在ingress 端口上的pvid设定作为增加的标记中的vlan id号。
三、端口的封装类型:ISL、802.1Q
ISL Trunk上所有的包都是tag的(Cisco专用);
802.1q 设计的时候为了兼容与不支持VLAN的交换机混合部署,特地设计成可以不tag:但是只有一个VLAN允许不tag,这样N个VLAN,(N-1)个都tag了,不tag的包一定是来自那个特殊VLAN的,所以不会乱套。(当然也可以所有VLAN都tag)
四、各端口收发数据的区别
| 端口类型 | 收发 | 描述 |
| Access | 收报文 | 判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有则直接丢弃(缺省) |
| 发报文 | 将报文的VLAN信息剥离,直接发送出去 | |
| Trunk | 收报文 | 收到一个报文,判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有判断该trunk端口是否允许该 VLAN的数据进入:如果可以则转发,否则丢弃 |
| 发报文 | 比较端口的PVID和将要发送报文的VLAN信息,如果两者相等则剥离VLAN信息,再发送,如果不相等则直接发送 | |
| Hybrid | 收报文 | 收到一个报文判断是否有VLAN信息:如果没有则打上端口的PVID,并进行交换转发,如果有则判断该hybrid端口是否允许该VLAN的数据进入:如果可以则转发,否则丢弃 |
| 发报文 | 判断该VLAN在本端口的属性(disp interface 即可看到该端口对哪些VLAN是untag, 哪些VLAN是tag)如果是untag则剥离VLAN信息,再发送,如果是tag则直接发送 |
以下案例可以帮助大家深入理解华为交换机的hybrid端口模式
[Switch-Ethernet0/1]int e0/1
[Switch-Ethernet0/1]port link-type hybrid
[Switch-Ethernet0/1]port hybrid pvid vlan 10
[Switch-Ethernet0/1]port hybrid vlan 10 20 untagged
[Switch-Ethernet0/1] int e0/2
[Switch-Ethernet0/2]port link-type hybrid
[Switch-Ethernet0/2]port hybrid pvid vlan 20
[Switch-Ethernet0/2]port hybrid vlan 10 20 untagged
此时inter e0/1和inter e0/2下的所接的PC是可以互通的,但互通时数据所走的往返vlan是不同的。
以下以inter e0/1下的所接的pc1访问inter e0/2下的所接的pc2为例进行说明
pc1所发出的数据,由inter0/1所在的pvid vlan10封装vlan10的标记后送入交换机,交换机发现inter e0/2允许vlan 10的数据通过,于是数据被转发到inter e0/2上,由于inter e0/2上vlan 10是untagged的,于是交换机此时去除数据包上vlan10的标记,以普通包的形式发给pc2,此时pc1->p2走的是vlan10
再来分析pc2给pc1回包的过程,pc2所发出的数据,由inter0/2所在的pvid vlan20封装vlan20的标记后送入交换机,交换机发现inter e0/1允许vlan 20的数据通过,于是数据被转发到inter e0/1上,由于inter e0/1上vlan 20是untagged的,于是交换机此时去除数据包上vlan20的标记,以普通包的形式发给pc1,此时pc2->pc1走的是vlan20
利率是资金的价格,是重要的宏观经济变量,决定着资金的流向,对宏观经济均衡和资源配置有重要导向意义。
理论上,自然利率是宏观经济总供求达到均衡时的真实利率水平。
中长期看,宏观意义上的真实利率水平应与自然利率基本匹配。
实践中一般采用“黄金法则”来衡量合理的利率水平,即经通胀调整后的真实利率r应与实际经济增长率g大体相等。
若真实利率持续高于潜在增速,会导致社会融资成本高企,企业经营困难,不利于经济发展。
真实利率低于潜在经济增速,有利于债务可持续,可以给政府一些额外的政策空间。
但如果真实利率持续明显低于潜在经济增速,会扭曲金融资源配置,带来过度投资、产能过剩、通货膨胀、资产价格泡沫、资金空转等问题,难以长期持续。
我国货币政策始终坚持以我为主,以静制动,引导市场利率水平稳中有降,效果较好。
目前我国定期存款利率约为1%至2%,贷款利率约为4%至5%,真实利率略低于潜在实际经济增速,处于较为合理水平,是留有空间的最优策略。
当前我国的经济增长、物价水平、就业状况、国际收支平衡等货币政策调控目标均运行在合理区间,从实际效果上也充分验证了我国当前的利率水平总体上处于合理区间。
这段内容信息量非常大,直接给出结论:
1,国家承认,当前中国的真实利率,略低于潜在实际增速,国家层面对于经济管控,具备一定的政策空间。
2,长期以来,中国央行基本上注重的是“政策利率”,很少,或者说基本没有提及和对外讨论过“自然利率”的说法。
但是国外央行,特别是发达资本主义国家的央行,对于这个自然利率的概念非常关注,当然,国外的提法是“中性利率”。
这是一个很大的转变信号。
3,中性利率,或者说自然利率,是国家和经济体级别,最理想的经济平衡状态。
4,如果中国央行真的以自然利率为锚,进行相关的经济调控,意味着中国国家的货币政策规则一个质层面的巨大变化,甚至可以说转向。
长期以来,中国的利率实际上是宏观经济关键的有形之手,利率就是资金的价格,价格是资源配置优化的最好信号,但是国家和金融部门对实体经济参与程度,以及政策的反应和传递消化需要必然的过程和时间,就会导致一个错位期和滞后的情况存在。
当然,这也是实现“稳健”主线的必然成本。
如果国家金融的利率,是以通胀调整以后的真实利率为指向标进行调整,那么资源的扭曲配置就能得到避免。
简单一点说,就是利率市场化,这能提升社会资源配置的效率和经济活力,但是甘蔗没有两头甜,利率放开,那么对于行业和经济环境的收益管理,打击哄抬炒作行为,控制经济环境中的泡沫现象,以及扼杀投机和各种骗局的难度,就会直线上升。
品牌其实就是质检出来的,
做一个检验机构,对不健康的产品(只要不健康就算符合国标)也不上架,并在网上挂产品卖
先宝塔,里面装docker,再用以下命令在docker中装青龙
docker run -dit \
--name QL \
--hostname QL \
--restart always \
-p 5700:5700 \
-v $PWD/QL/config:/ql/config \
-v $PWD/QL/log:/ql/log \
-v $PWD/QL/db:/ql/db \
-v $PWD/QL/scripts:/ql/scripts \
-v $PWD/QL/jbot:/ql/jbot \
whyour/qinglong:latest
再在宝塔和云服务器后台放开入站规则5700端口,然后登录
chrome浏览器访问 https://m.jd.com 然后点击 我的并用手机京东app扫描弹出来的二维码。
然后F12打开浏览器调试工具,点击 Application找到 Cookies 点击 https://home.m.jd.com,
在右边我们找到 pt_key和 pt_pin两个变量的值,将他们记录下来。
在我们拿到 pt_key和 pt_pin两个变量后我们就可以开始配置青龙面板的环境变量了。
在面板的右上角我们可以看到环境变量这个选项,我们点击增加。
在弹出的窗口中输入变量,名称为 JD_COOKIE 值就是刚刚获取的 pt_key和 pt_pin两个变量,注意别搞反了(中间和后面的分号不可少),如
pt_key=AAJhuUiCADQS_fjhNxcGreONxMHJdtIQ1Tg0dCJK4n3FHHqW4sEv3Y-4dmXH1C8;pt_pin=jd_6ca591d6a;
在配置好环境变量后我们就可以开始拉取脚本了,由于脚本库会更新我们拉取脚本的命令也可以放在定时任务中。
进入面板-右上角“定时任务”-分别填入相关信息。提供个人设置,给大家参考。其中任务名、任务定时可自定义。
名称:
拉取京东脚本
拉库命令填写下方代码:
ql repo https://gh.fakev.cn/KingRan/KR.git "jd_|jx_|jdCookie" "activity|backUp" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
或者:
ql repo https://hub.fastgit.xyz/KingRan/KR.git "jd_|jx_|jdCookie" "activity|backUp" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
PS:两者任选其一即可
国外鸡可直连Github的话填写下方代码
ql repo https://github.com/KingRan/KR.git "jd_|jx_|jdCookie" "activity|backUp" "^jd[^_]|USER|utils|function|sign|sendNotify|ql|JDJR"
定时规则(每天8点30):
30 8 * * *
填写完毕后我们点击播放按钮运行一次脚本,稍等一下,让它转一会儿。然后刷新页面,就能看到库的脚本了
看到上面的内容可以说就大功告成了,京东脚本就会按照脚本设置的时间自动执行任务获取京豆和红包。
一键依赖
docker exec -it qinglong bash
## 安装青龙依赖,如果按上面的安装青龙容器脚本,此处要把qinglong改成QL.
curl -fsSL https://ghproxy.com/https://raw.githubusercontent.com/FlechazoPh/QLDependency/main/Shell/QLOneKeyDependency.sh | sh
在每次执行完我们需要一个推送来告诉我们今天获取了多少京豆,以及cookies有没有过期。我们在面板的配置文件项的第44行找到server酱并填入SendKey并保存即可。
目前Server酱使用门槛变高,改用钉钉机器人是一个比较好的选择,具体步骤可参考这篇文章:青龙面板 消息推送功能设置之钉钉机器人消息推送! – 孤岛 (feiji.work)
这是一个非常好的服务器回血项目,即使在配置和搭建上比较复杂,但是收益还是相当可观的,配置得当你甚至在收回本金后还能赚不少钱。
其它补充内容可参考:搭建青龙面板运行京东、B站脚本 – 登山亦有道 (chenyan98.cn),目前发表原文的站点无法访问,看seo关键词估计是被请去喝茶了,。
青龙面板自动领京东京豆,做农场浇水、萌宠、工厂、种豆等任务-缙哥哥 (dujin.org)
青龙面板拉取常用脚本(JD签到)目前在维护的脚本更新(2021-10-04)
https://blog.csdn.net/m0_61705773?type=blog
其它用法
写好脚本则更能够帮你抓取数据到文件、数据库,部分实现自动化,甚至远超一些同类专业产品。
常规功能
可以用来指定抓取所有的WEB通讯,也可以只抓取指定进程的通讯。
File-Capture Traffic ; Any Process 或拖动选定进程窗口
2.可以用来查看一个URL打开后,浏览器与后端的交互
3.可以查看任意一个HTTP交互,看请求和响应的原始报文,帮助你了解HTTP协议
4.可以设置丰富的过滤条件,确保聚焦
5.可以以各种形态查看数据,并提供了工具来做转换【这个比较丰富,但隐藏较深】
6.可以编写脚本,实现各个阶段的处理
可以基于类似Windows下的WScript,甚至使用一些ActiveX组件实现并发机制、通讯与数据存储。
OnBeforeRequest 在请求发生前调用,请求经过Fiddler发送给服务器之前会先调用这个函数,因此,如果想要修改请求,可以写在这个函数里
OnPeekAtResponseHeaders 在头到达后调用
OnBeforeResponse 在内容到达后,还没有处理前调用,从服务器读完响应后,且在将响应发送给客户端之前执行的。通过修改这个函数,可以修改服务器的响应头或者响应体
把网页上的JSON文件下载到本地
把以下内容放入OnBeforeResponse里面,
if (m_Hide304s && oSession.responseCode == 304) {
oSession["ui-hide"] = "true";
}
if (oSession.uriContains("https://www.tiktok.com/api/recommend/item_list/")){
var strBodytk=oSession.GetResponseBodyAsString();
//var spstk = oSession.PathAndQuery.slice(-58,);
//FiddlerObject.alert(spstk)
var timestamptk=new Date().getTime();
var filenametk = "D:\\tiktokzl" + "\/" + timestamptk + ".json";
//var filename = "D:\抖音评论资料" + "/" + sps + timestamp + ".json";
var curDatetk = new Date();
var swtk : System.IO.StreamWriter;
if (System.IO.File.Exists(filenametk)){
swtk = System.IO.File.AppendText(filenametk);
swtk.Write(strBodytk);
}
else{
swtk = System.IO.File.CreateText(filenametk);
swtk.Write(strBodytk);
}
swtk.Close();
swtk.Dispose();
}
抓到 请求的数据 保存本地txt 文件里面
if (oSession.fullUrl.Contains("填写需要抓取的域名")) { var fso; var file; fso = new ActiveXObject("Scripting.FileSystemObject"); //文件保存路径可自定义 file = fso.OpenTextFile("填写保存TXT文件地址",8 ,true, true); file.writeLine("Request url: " + oSession.url); file.writeLine("Request header:" + "\n" + oSession.oRequest.headers); file.writeLine("Request body: " + oSession.GetRequestBodyAsString()); file.writeLine("\n"); file.close();}自动化抓取图片并提出重复的
static function FileExsitInDirectory(fso:Object, filename:String , dirpath:String )
{
var curPath = dirpath + “/” + filename ;
var objset , objFolders , FolderName, ret;
if (fso.FileExists(curPath))
{
return curPath;
}
else
{
var objset = fso.getFolder(dirpath);
var objFolders = objset.SubFolders;
var fenum = new Enumerator(objset.SubFolders);
for (var i = 0 ; !fenum.atEnd(); fenum.moveNext(),i++)
{
var FolderName = dirpath + "/" + fenum.item().Name + "/";
var ret = FileExsitInDirectory(fso, filename, FolderName);
if( ret != "NULL" )
{
return ret
}
}
return "NULL";
}
}
static function OnBeforeResponse(oSession: Session)
{
if (m_Hide304s && oSession.responseCode == 304)
{
oSession[“ui-hide”] = “true”;
}
//如果来自指定网站,且是jpg,则写文件 image/jpeg
if(
(oSession.RequestHeaders.AllValues("Host").Contains(".mm115.net") ||
oSession.RequestHeaders.AllValues("Host").Contains(".jzsjwk.com"))
&&
oSession.ResponseHeaders.AllValues("Content-Type").Contains("image/jpeg") )
{
var whindex = oSession.url.IndexOf ('?');
if (whindex <= 0)
whindex = oSession.url.Length;
var file_url = oSession.url.Substring (0,whindex);
whindex = oSession.url.IndexOf ('.jpg');
if ((whindex > 0) && (oSession.GetResponseBodyAsString().Length > 40000))
{
whindex = whindex+4;
file_url = file_url.Substring (0,whindex).Replace ('/','_').Replace('%','B').Replace('?','7').Replace('&','-').Replace('img22.jzsjwk.com','img1.mm115.net');
var file_path = "d:/PRVIT/jpg/"+file_url;
try
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var retval = FileExsitInDirectory(fso,file_url,"d:/PRVIT/jpg/");
FiddlerObject.log (retval);
if ("NULL" == retval)
{
var stream = new ActiveXObject('Adodb.Stream');
stream.Mode = 3;
stream.Open();
stream.Type = 1;
//stream.Charset = 'unicode';
//stream.WriteText(s);
stream.Position = 0;
stream.Type = 1;
//stream.Position = 2;
//var bs = stream.Read();
//stream.Position = 0;
stream.Write(oSession.responseBodyBytes);
//stream.SetEOS();
stream.SaveToFile(file_path,1);
stream.Close();
oSession["ui-backcolor"] = "yellow";
}
else
{
oSession["ui-strikeout"] = "true";
oSession["ui-backcolor"] = "green";
}
}
catch(err)
{
FiddlerObject.log (err.message);
oSession["ui-backcolor"] = "red";
}
}
else
{
oSession["ui-color"] = "red";
}
}
}
抓取内容,并存放到数据库
var sql = “”;
try
{
var con =new ActiveXObject(“ADODB.Connection”);
//con.Provider="Microsoft.ACE.OLEDB.18.0";
var rs=new ActiveXObject("ADODB.Recordset");
/**
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Y:/TEST/fiddler_web_service_analysis.accdb;Persist Security Info=False;
**/
//var access_db_path = "d:/fiddler_web_service_analysis.accdb" ;
//con.ConnectionString="Data Source="+access_db_path;
//ODBC DSN name ,config by windows odbc
con.open("DSN=db_hsb_vs_ahs;") ;
//FiddlerObject.alert(1);
sql = "insert into t_call_record (call_timestamp,request_send_timestamp,response_recv_timestamp,sitename,url,request,response,spend_second,content_type,content_length) values(" +
strVar1(oSession.Timers.FiddlerBeginRequest) + "," +
strVar1(oSession.Timers.ClientDoneRequest) + "," +
strVar1(oSession.Timers.ServerDoneResponse) + "," +
strVar1(oSession.RequestHeaders.AllValues("Host")) + "," +
strVar1(oSession.url.Substring (0,whindex)) + "," +
strVar1(oSession.RequestHeaders.ToString ()+oSession.GetRequestBodyAsString()) + "," +
strVar1(oSession.ResponseHeaders.ToString ()+oSession.GetResponseBodyAsString()) + "," +
etimes*1000 + "," +
strVar1(oSession.ResponseHeaders.AllValues("Content-Type")) +"," +
oSession.ResponseHeaders.AllValues("Content-Length")+0
+");";
//FiddlerObject.alert(sql);
rs.open(sql,con);
oSession["ui-color"] = "red";
//rs.close();
// rs=NULL;
con.close();
// con = NULL;
}
catch(exp)
{
var txt="Error description: " + exp.message + "\n\n" + sql;
FiddlerObject.log(txt);
oSession["ui-strikeout"] = "true";
}
if(oSession.HostnameIs("host") && oSession.url.IndexOf("url_path") > -1){
oSession.hostname = "api.mobile.xxx.com"
}
// TSET FOR Spider: 根据网站来限定请求
if (oSession.HostnameIs("test.com")) {
// 模拟修改请求的用户端ip,这种情况对独立的网络有效,对于公司级的网络,还是有一些问题,需要借助vpn
oSession.oRequest["X-Forwarded-For"]="16.12.23.16";
// 修改请求的header
oSession.oRequest["User-Agent"] = "spider Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0";
}
2019.04.26 手机模拟添加cookie(区别于种cookie 在onBeforeResponse里)
oSession.oRequest.headers.Remove("Cookie");oSession.oRequest.headers.Add("Cookie", "username=testname;testpassword=P@ssword1");注意: Fiddler script不能直接删除或者编辑单独的一个cookie, 你需要用replace方法或者正则表达式的方法去操作cookie的string
if (oSession.HostnameIs("******") && oSession.oRequest.headers.Exists("Cookie") ) {
var sCookie = oSession.oRequest["Cookie"];
//用replace方法或者正则表达式的方法去操作cookie的string
//sCookie = sCookie.Replace("cookieName=", "ignoreme=");
sCookie = sCookie + ";tt_spver=1";
oSession.oRequest["Cookie"] = sCookie;
}
在此处修改response的bady内容【使用正则匹配方式】
if(oSession.HostnameIs("host") && oSession.url.IndexOf("url_path") > -1){
// 获取response中的body字符串
var strBody=oSession.GetResponseBodyAsString();
// 用正则表达式或者replace方法去修改string
var regx = '"stream_mode":\d*?'
strBody=strBody.replace(regx,'"stream_mode":0');
// 弹个对话框检查下修改后的body
FiddlerObject.alert(strBody);
// 将修改后的body,重新写回Request中
oSession.utilSetResponseBody(strBody);
}
在此处修改json中的数据【修改接口字段的值】
if(oSession.HostnameIs("host") && oSession.url.IndexOf("url_path") > -1){
// 获取Response Body中JSON字符串
var responseStringOriginal = oSession.GetResponseBodyAsString();
// 转换为可编辑的JSONObject变量
var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
// 修改JSONObject变量,修改字段数据
responseJSON.JSONObject["new_core"] = "True";
responseJSON.JSONObject["stream_mode"] = 5;
// 重新设置Response Body
var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
oSession.utilSetResponseBody(responseStringDestinal);
}
在此处修改json中的数据【增加接口字段=值】
if(oSession.HostnameIs("host") && oSession.url.IndexOf("url_path") > -1){
// 获取Response Body中JSON字符串
var responseStringOriginal = oSession.GetResponseBodyAsString();
// 转换为可编辑的JSONObject变量
var responseJSON = Fiddler.WebFormats.JSON.JsonDecode(responseStringOriginal);
// 修改JSONObject变量,修改字段数据
responseJSON.JSONObject["type_arr"] = ["bullet"];
// 重新设置Response Body
var responseStringDestinal = Fiddler.WebFormats.JSON.JsonEncode(responseJSON.JSONObject);
oSession.utilSetResponseBody(responseStringDestinal);
}
使指定URL支持CORS跨域请求有时候,你调用一个 json 接口,发现跨域了,你需要去找接口的开发人支持跨域,显然傻傻等待后端开发完毕再联调是低效率的, 这个时候就就要在后台改完之前就自己实现跨域的模拟,此时 fiddler 显然是再好不过的利器。支要持 CORS 跨域, 就是要为请求的返回头增加 Access-Control-Allow-Origin 属性,因此需要修改 OnBeforeResponse函数,在该函数的末尾添加你的 CORS 逻辑
static function OnBeforeResponse(oSession: Session) {
...
if(oSession.uriContains("要处理的url")){
oSession.oResponse["Access-Control-Allow-Origin"] = "允许的域名";
oSession.oResponse["Access-Control-Allow-Credentials"] = true;
}
}
oSession常用的相关属性和方法
// 修改session中的显示样式
oSession["ui-color"] = "orange";
// 移除http头部中的MQB-X5-Referer字段
oSession.oRequest.headers.Remove("MQB-X5-Referer");
// 修改http头部中的Cache-Control字段
oSession.oRequest["Cache-Control"] = "no-cache";
// 修改host
oSession.host = "example.domain";
// 修改Origin字段
oSession.oRequest["Origin"] = "http://domain";
// 删除所有的cookie
oSession.oRequest.headers.Remove("Cookie");
// 新建cookie
oSession.oRequest.headers.Add("Cookie", "username=cookiename;");
// 修改Referer字段
oSession.oRequest["Referer"] = "https://yoururl";
// 获取Request中的body字符串
var strBody=oSession.GetRequestBodyAsString();
// 用正则表达式或者replace方法去修改string
strBody=strBody.replace("aaaa","bbbbbb");
// 将修改后的body,重新写回Request中
oSession.utilSetRequestBody(strBody);
// 判断连接中是否包含字符串str
oSession.uriContains(str)
// 给连接请求添加一个字段TEST
oSession.oRequest["TEST"]="TEST NEW Request";
可参考
https://github.com/gitjayzhen/FiddlerUseScript