fiddlerJScript脚本工具类,轻松写出fiddler 脚本,完成数据抓取

2 篇文章 0 订阅
1 篇文章 0 订阅

fiddler是常用的抓包工具,fiddlerJScript脚本是用JScript.NET 编写的,使用起来和JS 还是有很多区别的.
目前网络上的文章比较分散,有些内容也比较旧,对新手不友好.
所以自己动手写了一个工具类,封装了一些常用的方法.

下面是类代码:



//FidderJScript 脚本 工具类函数 $  作者:云先生  2022.12.06
class ${

public static var oSession: Session=null;
//初始化 绑定Session
public  static function  init(mSession: Session) {
oSession= mSession;

}
//获取 Session

public  static function  get_Session() {
    return oSession
}

//创建json对象
public  static function  json() {
    var strjson = '{}'
    var json = Fiddler.WebFormats.JSON.JsonDecode(strjson);
    var oObj = json.JSONObject;
    return oObj
}

//把json字符串转为json 对象
public static function  json_load(jsonstr) {
    var json = Fiddler.WebFormats.JSON.JsonDecode(jsonstr);
    var oObj = json.JSONObject;
    if((oObj=='System.Collections.ArrayList' || oObj=='System.Collections.Hashtable')){

        return oObj
    }else{
        return json()
    }
}

//提示弹窗信息
public static function  alert(msg){
    FiddlerObject.alert(msg)
}


//将json对象转为字符串
public static function  json_to_str(jsonobj) {
    if((jsonobj=='System.Collections.ArrayList' || jsonobj=='System.Collections.Hashtable')){
        var json_str = Fiddler.WebFormats.JSON.JsonEncode(jsonobj);
        return json_str
    }else{
        return "{}"
    }
}

//获取对象类型
public static function  type(obj) {
    var typ=obj.GetType()
//print2("类型为:",typ)
    return typ

}

//判断a b 类型是否相同  返回ture fasle
//typeof只能判断区分基本类型,number、string、boolean、undefined和object,function;
// obj.GetType() 获取具体类型
public static function  is_str(obj) {
    return typeof obj == "string"

}

//判断是否为 undefined 类型
public static function  is_undefined(obj) {
    return typeof obj == "undefined"

}

public static function  is_object(obj) {
    return typeof obj == "object"

}

public static function  is_function(obj) {
    return typeof obj == "function"

}
public static function  is_boolean(obj) {
    return typeof obj == "boolean"

}


//保存为文件 file_full_name 文件名(全路径)    data 写入的数据 支持 dict str 和 json  //is_cover  覆盖 结尾插入
public static function write_file(file_full_name, data,is_cover:boolean) {
    var datastr=""
    if (data=="System.Collections.Hashtable" || data=='System.Collections.ArrayList' ) {
        datastr=$.json_to_str(datastr)
    }else if (data=="System.Collections.Generic.Dictionary`2[System.String,System.Object]") {
        datastr= $.dict_to_str(data)

    } else if(data.GetType().ToString()=="Fiddler.HTTPRequestHeaders"  ||  data.GetType().ToString()=="Fiddler.HTTPRequestHeaders"   ) {
        datastr= $.dict_to_str(data)

    }else {
        datastr=data
    }
    
    var Content: byte[] = System.Text.Encoding.UTF8.GetBytes(datastr);

//.Default.GetBytes(datastr);  //.ASCII.GetBytes(datastr);
    if (is_cover){
        System.IO.File.WriteAllBytes(file_full_name,Content);
    }else{
        System.IO.File.AppendAllText(file_full_name,datastr+"\r\n")
    }
}


//读取文件 返回所有字符串  encode_index="" "0" 或"1" 编码都是utf-8
public static function open_file(file_full_name:String,encode_index:String) {
    if(   System.IO.File.Exists(file_full_name)){

        encode_index=encode_index.Trim()
        if ( $.number(encode_index) < 2 || $.number(encode_index) > 7 ){
            encode_index="1"
        }
        var encodlist= json()
        encodlist["1"]=System.Text.Encoding.UTF8
        encodlist["2"]=System.Text.Encoding.Default
        encodlist["3"]=System.Text.Encoding.ASCII
        encodlist["4"]=System.Text.Encoding.Unicode
        encodlist["5"]=System.Text.Encoding.BigEndianUnicode
        encodlist["6"]=System.Text.Encoding.UTF32
        encodlist["7"]=System.Text.Encoding.UTF7


        return  System.IO.File.ReadAllText(file_full_name,encodlist[encode_index])


    }
    else{
        print("提示:文件名 "+file_full_name+" ,找不到文件!")
    }

}
//把字符串转为数字
public static function number(nstr)	{
    return Number(nstr)
}


//把字符串转为数字
public static function str(value)	{
    return String(value)
}

//打印输出1
public static function  print(str) {
    FiddlerObject.log(str);
}

//打印输出2
public static function print2(str1, str2) {
    var str3 = str1 + " , " + str2
    FiddlerObject.log(str3);
}

//打印输出多个参数
public static function print3(arguments:Array) {
    var result = "";
    for(var i = 0; i < arguments.length; i++){
        result += arguments[i]+",";
    }
    FiddlerObject.log(result);
}

//获取浏览器链接的某个参数值
public static function get_short_url(full_url:String)	{
    if(full_url.Contains("?")){
        var surlist=full_url.Split("?")
        return surlist[0]

    }else{
        var len=full_url.Length
        if (len>50){
            len=50
        }


        full_url=full_url.Substring(0,len)
        if( full_url.Contains(".com") )
        {
            full_url.Replace(".com",".com?")
            return full_url.Split("?")[0]

        }

        full_url=full_url.Substring(0,len)
        if( full_url.Contains(".cn") )
        {
            full_url.Replace(".cn",".cn?")
            return full_url.Split("?")[0]

        }
        
        return full_url.Substring(0,len)
    }
    
}

//获取浏览器链接的某个参数值
public static function get_url_Prams(key,url)	{
    var jsondata=get_url_prams_to_json(url)
    return jsondata[key]
}

//获取浏览器链接所有参数 并转化为json
public static function get_url_prams_to_json(url)	{
    var myjson=json()
    try{
        var pramslist=url.Split("?")
        if (pramslist.Length >1){
            print2("pramslist.Length",pramslist.Length)
            var prams=pramslist[1]
            if(prams!="" && is_str_contain(prams,'=')  ){
                var plist=prams.Split("&")
                print2("plist",plist.Length)
                if (plist.Length >1 ){
                    for (var i:int = 0; i < plist.Length; i++){
                        var str1=plist[i];
                        if (is_str_contain(str1,'=') ){
                            var dlist=str1.Split("=")
                            myjson[dlist[0]]=dlist[1]
                        }
                    }
                }else if(is_str_contain(prams,'=')) {

                    var dlist=prams.Split("=")
                    myjson[dlist[0]]=dlist[1]
                }
            }
        }
    }catch(err){
        var err;
    }
    return myjson
}

//将字符串转化为url格式 不会被特殊符号截断
public static function url_encode(str:String){
    var UrlEncode=System.Net.WebUtility.UrlEncode
    return UrlEncode(str)
}

//获取Session中的请求内容 RequestBody
public static function get_RequestBody_str(){

    var oSession=get_Session()
    return oSession.GetRequestBodyAsString();
}

//获取Session中的应答中的内容 ResponseBody
public static function get_ResponseBody_str(){
    var oSession=get_Session()
    return oSession.GetResponseBodyAsString();
}

//获取host
public static function get_hostname(){
    var oSession=get_Session()
    return oSession.hostname;
}

//获取Request headers对象
public static function get_Request_headers(){
    var oSession=get_Session()
    return oSession.oRequest.headers;
}

//获取Response headers对象
public static function get_Response_headers(){
    var oSession:Session=get_Session()
    return oSession.oResponse.headers
}
//获取全部url
public static function get_full_Url(){
    var oSession=get_Session()
    return oSession.fullUrl;
}
//获取Request Cookie
public static function get_Request_Cookie(){
    var oSession=get_Session()
    if(oSession.oRequest.headers.Exists("Cookie")){
        return oSession.oRequest["Cookie"];
    }
    else{
        return ""
    }
}

//获取Response Cookie
public static function get_Response_Cookie(){
    var oSession:Session=get_Session()
    if(oSession.oResponse.headers.Exists("Cookie")){
        return oSession.oResponse["Cookie"];
    }
    else{
        return ""
    }

}

//判断字符串是否包含
public static function is_str_contain(allstr:String,strfind:String){
    return allstr.Contains(strfind)
}

//获取长度
public static function len(list){
    return list.Length
}

//会话显示红色.
public static function set_ui_color_red(){
    var oSession=get_Session()
    oSession["ui-color"] = "red";

}
//隐藏会话
public static function set_ui_hide(){
    var oSession=get_Session()
    oSession["ui-hide"] = "true";

}
// 将修改后的body,重新写回Request中
public static function set_RequestBody_str(strBody){
    var oSession=get_Session()
    oSession.utilSetRequestBody(strBody);
}
//设置Cookie
public static function set_Cookie(sCookie){
    var oSession=get_Session()
    oSession.oRequest["Cookie"] = sCookie;

}
//获取应答状态值 code
public static function response_code(){
    var oSession=get_Session()
    return oSession.responseCode;
}
//解码应答 防止乱码
public static function decode_response(){
    var oSession=get_Session()
    return oSession.utilDecodeResponse();
}
//判断host_name是否是 返回 true false
public static function is_host_name(hostname:String){
    var oSession=get_Session()
    if (oSession.HostnameIs(hostname.Trim())) {
        return true
    }
    else{
        return false
    }
}
//判断host_name_contains  是否包含某个 字符串 是否是 返回 true  false
public static function is_host_name_contains(myhostname:String){
    var hostname:String=$.get_hostname()
    return hostname.Contains(myhostname)
}
//判断url是否是包含字符串  返回 true false
public static function is_uri_contains(uri:String){
    var oSession=get_Session()
    return oSession.uriContains(uri)
}
//判断headers是否是包含某个key  返回 true false
public static function is_headers_Contains(key:String){
    var oSession=get_Session();
    return oSession.oRequest.headers.Exists(key);

}
//替换字符串  replace("123455666","55","99")
public static function replace(allstr:String,oldstr:String,newstr:String){
    return allstr.Replace(oldstr,newstr);
}

public static function json_to_Url(myJson){
    var params=[]
    for (var de in myJson) {
//print(de.Key + "=" + de.Value);
        params.push(de.Key + "=" + de.Value);
    }
    return "?" + params.join("&");
}
// 把json对象转为   dict 对象
public static  function json_to_dict(myjson){
    var cdict=FiddlerObject.createDictionary()
    if (myjson=="System.Collections.Hashtable" || myjson=='System.Collections.ArrayList' ) {
        for (var de in myjson) {
            cdict.Add(de.Key,de.Value)
        }
    }
    return  cdict
}

// 把dict 对象转json
public static function dict_to_json(myditc){
//print2("myditc.Type:",myditc.GetType())
    var jsdata=json()
    if (myditc=="System.Collections.Generic.Dictionary`2[System.String,System.Object]") {

        for (var de in myditc) {
            jsdata[de.Key] =de.Value;
        }
    }
    if (myditc.GetType().ToString()=="Fiddler.HTTPRequestHeaders"  ||  myditc.GetType().ToString()=="Fiddler.HTTPRequestHeaders"   ) {

        for (var de in myditc) {
//print2("de.GetType:",de.GetType())
            jsdata[de.Name] =de.Value;
        }
    }
    return jsdata
}

// 把dict 对象转json 字符串
public static function dict_to_str(myditc){
    var jsdict=dict_to_json(myditc)

    return $.json_to_str(jsdict)

}

//获取一个dict 对象
public static function dict(){

    var di=FiddlerObject.createDictionary()
    return di
}


//发送 网络请求 不等待 如  $.send_Request("127.0.0.1:5000","/","get","{'msg':'hello world'}",1)

public  static function  send_Request(host: String,path:String,http_method: String,data_str: String,Content_type_index:int) {
//Content_type_index 对应
// 0 = Content-Type
// 1 = application/json
// 2 = application/x-www-form-urlencoded
// 3 = multipart/form-data
// 4 = text/plain
// 5 = text/xml
// 6 = text/html
    
    var Content_typeList=[]
    Content_typeList.push("*","application/json","application/x-www-form-urlencoded","multipart/form-data","text/plain","text/xml","text/html")

    var Content_type=Content_typeList[Content_type_index] //获取 Content_type 内容

//print2("Content_type",Content_type)

    var full_url=host+path
//判断 如果是GET 方法 把数据放到 url 链接

    if (http_method.Trim()=="get" || http_method.Trim()=="GET"  ){

        var url_data=$.url_encode(data_str)
        path=path+url_data //这里主要 要在path 后面加上 "?data="  或者使用
        full_url=host+path

//print2("full_url:",full_url)
        data_str="" //把数据 清零 post 不用重复发送了
    }

    var Content: byte[] = System.Text.Encoding.UTF8.GetBytes(data_str);

    var oRQH: HTTPRequestHeaders = new HTTPRequestHeaders(path, ['Host:' +host,'Content-Length: '+Content.length.ToString(), 'Content-Type: '+Content_type]);

    oRQH.HTTPMethod = http_method;

    var oSD = new System.Collections.Specialized.StringDictionary();

    FiddlerApplication.oProxy.SendRequest(oRQH, Content, oSD, null);//发送请求

    print("***目标地址:"+$.get_short_url(full_url)+", 请求方式:"+http_method+" ,****转发完成****")

}

//=============http://127.0.0.1:5000/fidder
// Content-Type
//*
// application/json
// application/x-www-form-urlencoded
// multipart/form-data
// text/plain
//  text/xml
//  text/html
//用SendRequestAndWait 方法发送网络请求  可以获取服务器的数据
public static function post(datastr){

    var Content_type="application/json"
    var Content: byte[] = System.Text.Encoding.UTF8.GetBytes(datastr);
    var oRQH: HTTPRequestHeaders = new HTTPRequestHeaders("/fidder", ['Host: 127.0.0.1:5000','Content-Length: '+Content.length.ToString(), 'Content-Type: '+Content_type]);
    oRQH.HTTPMethod = "POST";
    var oSD = new System.Collections.Specialized.StringDictionary();
    var newSession = FiddlerApplication.oProxy.SendRequestAndWait(oRQH, Content, oSD, null);


    if (200 == newSession.responseCode)
    {
//这里写自己要做的事情代码
        print(newSession.oResponse.ToString)
        print("发送请求成功")

    }
}

}

使用的话也很简单,把代码黏贴到 前面.
插入位置

里面封装了很多方法.
如何使用:

    //请求之前 OnBeforeRequest  需要使用 $.init(oSession) 设置好Session
    static function OnBeforeRequest(oSession: Session) {
         $.init(oSession)
		$.print("hello world!")	
		var json=$.json()	
		json["name"]="sss"	
		json["sex"]="nv"	
		var jstr=$.json_to_str(json)
		var hd=$.
		$.send_Request("127.0.0.1:5000","/","get",jstr,1)// 发送网络请求
		if ( ! $.is_host_name_contains("baidu.com") || ! $.is_host_name_contains("127.0.0.1")   ) {
              $.set_ui_hide()
        }
        //里面还有好多方法
}

如有不明白可留言.

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值