这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
基本功能
- 抓包,在有道翻译下右键->检查->"Network",多次输入翻译找到对应请求报文中变化的部分
2. 复制请求报文的curl命令,到进行curl转换生成相应的代码,将代码复制下来
-
使用生成的代码程序发送报文获取json格式响应报文
-
最终到报文生成的js代码段,可知
lts为时间戳,slat是在时间戳上加上一个10以内的随机数,sign为根据下列字符串进行MD5加密生成的数据
-
修改请求报文中
lts、slat、sign的生成代码lts := strconv.FormatInt(time.Now().Unix()*1000, 10) //时间 salt := lts + strconv.FormatInt((int64(rand.Intn(10))+1)%10, 10) tempstr := "fanyideskweb" + os.Args[1] + salt + "Ygy_4c=r#e#4EX^NUGUc5" m := md5.New() m.Write([]byte(tempstr)) sign := hex.EncodeToString(m.Sum(nil)) -
修改原请求报文代码中的报文内容即可
拓展功能
-
利用
flag包选择搜索引擎flag.string函数创建了一个新的string变量。它有三个参数:
- 标识符的名字(”s“)
- 变量的默认值("youdao")
- 当用户提供非法标识、非法参数抑或
-h或-help参数输出信息时输出的信息
var dict_soft = flag.String("s", "youdao", `"set the dictionary software (like "caiyunai", "youdao")"`)使用效果如下:
- 并行处理两个搜索引擎增加翻译效率,并行处理翻译的要求需要两个变量,为了防止两个翻译引擎对一个变量的多次翻译,使用共享变量+锁机制来进行同步操作,同步操作只针对共享变量,在除去共享变量区域的报文请求过程中不持有共享变量的锁,达到并行的效果。
可优化的地方
- 对
go语言了解不够深入,对go语言的反射机制不够了解,本来想通过反射机制创建请求报文,降低程序的耦合性