在获取像百度、有道这样的翻译网页,可能网页本身会有反获取机制,所以会一直输出550/998/997这样的错误,此时就需要动态生成参数,来不断变化sign让服务器识别该次访问不是机器,而是人为访问,此时反获取机制就无效。具体代码参考如下:破解反获取机制就是图中的字符串加密等操作。

package mainimport ("bytes""crypto/md5""encoding/hex""encoding/json""fmt""io/ioutil""log""math/rand""net/http""os""strconv""strings""sync""time"
)type DictRequest struct {TransType string `json:"trans_type"`Source    string `json:"source"`UserID    string `json:"user_id"`
}
type DictResponse struct {TranslateResult [][]struct {Tgt string `json:"tgt"`Src string `json:"src"`} `json:"translateResult"`ErrorCode   int    `json:"errorCode"`Type        string `json:"type"`SmartResult struct {Entries []string `json:"entries"`Type    int      `json:"type"`} `json:"smartResult"`
}func encrypt(str string) string { //md5 加密函数, 传入字符串,返回加密后的字符串h := md5.New()h.Write([]byte(str))return hex.EncodeToString(h.Sum(nil))
}func query_youdao(word string) {t := time.Now().UnixMilli()     //获取时间戳lts := strconv.FormatInt(t, 10) //时间戳就是ltsrand.Seed(time.Now().UnixNano())salt := lts + strconv.Itoa(rand.Intn(9))                                //lts + 随机数就是saltsign := encrypt("fanyideskweb" + word + salt + "Ygy_4c=r#e#4EX^NUGUc5") //对这些字符串 进行md5加密,返回就是signclient := &http.Client{}                                                //创建了一个http client,可以携带很多参数//var data = bytes.NewReader(buf)var data = strings.NewReader("i=" + word + "&from=AUTO&to=AUTO&smartresult=dict&client=fanyideskweb&salt=" + salt + "&sign=" + sign + "&lts=" + lts + "&bv=d60b9bede0ddd264422f25a5e061c49a&doctype=json&version=2.1&keyfrom=fanyi.web&action=FY_BY_REALTlME")req, err := http.NewRequest("POST", "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule", data)if err != nil {log.Fatal(err)}req.Header.Set("Connection", "keep-alive")req.Header.Set("Pragma", "no-cache")req.Header.Set("Cache-Control", "no-cache")req.Header.Set("sec-ch-ua", `" Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97"`)req.Header.Set("Accept", "application/json, text/javascript, */*; q=0.01")req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")req.Header.Set("X-Requested-With", "XMLHttpRequest")req.Header.Set("sec-ch-ua-mobile", "?0")req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36")req.Header.Set("sec-ch-ua-platform", `"Windows"`)req.Header.Set("Origin", "https://fanyi.youdao.com")req.Header.Set("Sec-Fetch-Site", "same-origin")req.Header.Set("Sec-Fetch-Mode", "cors")req.Header.Set("Sec-Fetch-Dest", "empty")req.Header.Set("Referer", "https://fanyi.youdao.com/")req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")req.Header.Set("Cookie", "OUTFOX_SEARCH_USER_ID_NCOO=571199853.2191676; _ntes_nnid=345417059c531595fb4fe238fef920d8,1629898865976; OUTFOX_SEARCH_USER_ID=1226273813@1.85.38.28; JSESSIONID=aaaAUKGsqk_QBgByiQJcy; fanyi-ad-id=305838; fanyi-ad-closed=1; ___rl__test__cookies=1652014252491")resp, err := client.Do(req)if err != nil {log.Fatal(err)}defer resp.Body.Close()bodyText, err := ioutil.ReadAll(resp.Body)if err != nil {log.Fatal(err)}if resp.StatusCode != 200 {log.Fatal("bad StatusCode:", resp.StatusCode, "body", string(bodyText))}var dictResponse DictResponseerr = json.Unmarshal(bodyText, &dictResponse)if err != nil {log.Fatal(err)}//fmt.Printf("%#v\n", dictResponse)//fmt.Println(word, "UK:", dictResponse.SmartResult.Entries, "US:", dictResponse.SmartResult.Type)for _, item := range dictResponse.SmartResult.Entries {fmt.Println(item)}
}func main() {if len(os.Args) != 2 {fmt.Fprintf(os.Stderr, `usage: simpleDict WORD
example: simpleDict hello`)os.Exit(1)}word := os.Args[1]query_youdao(word)
}

Go语言实现获取有道网页结果相关推荐

  1. python3爬虫有道翻译_一篇文章教会你利用Python网络爬虫获取有道翻译手机版的翻译接口...

    [一.项目背景] 有道翻译作为国内最大的翻译软件之一,用户量巨大.在学习时遇到不会的英语词汇,会第一时间找翻译,有道翻译就是首选.今天教大家如何去获取有道翻译手机版的翻译接口. ![image](ht ...

  2. python如何爬有道翻译_如何利用Python网络爬虫来获取有道翻译翻译接口--手机版的哦!...

    [一.项目背景] 有道翻译作为国内最大的翻译软件之一,用户量巨大.在学习时遇到不会的英语词汇,会第一时间找翻译,有道翻译就是首选.今天教大家如何去获取有道翻译手机版的翻译接口. ​ image [二. ...

  3. IT宅男利用Python网络爬虫获取有道翻译手机版翻译接口

    [一.项目背景] 有道翻译作为国内最大的翻译软件之一,用户量巨大.在学习时遇到不会的英语词汇,会第一时间找翻译,有道翻译就是首选.今天教大家如何去获取有道翻译手机版的翻译接口. [二.项目目标] 多国 ...

  4. R语言dataframe获取每个字段(特征)的数据类型实战:使用sapply函数获取每个字段(特征)的数据类型、通过柱状图可视化特征的种类以及个数

    R语言dataframe获取每个字段(特征)的数据类型实战:使用sapply函数获取每个字段(特征)的数据类型.通过柱状图可视化特征的种类以及个数 目录

  5. R语言当前目录获取及设置函数(getwd setwd)实战

    R语言当前目录获取及设置函数(getwd & setwd)实战 目录 R语言当前目录获取及设置函数(getwd & setwd)实战 #基本语法

  6. Swift3.0语言教程获取字符串编码与哈希地址

    Swift3.0语言教程获取字符串编码与哈希地址 Swift3.0语言教程获取字符串编码与哈希地址,以下将讲解字符串中其它内容的获取方法. 1.获取字符串编码 在NSString中可以使用2个属性获取 ...

  7. Swift3.0语言教程获取C字符串

    Swift3.0语言教程获取C字符串 Swift3.0语言教程获取C字符串,为了让Swift和C语言可以实现很好的交互,开发者可以使用NSString的cString(using:)方法在指定编码格式 ...

  8. Swift3.0语言教程获取字符

    Swift3.0语言教程获取字符 Swift3.0语言教程获取字符,在字符串中获取某一下标位置(下标索引)处的字符是很常见的功能,在NSString中使用character(at:)方法实现,其语法形 ...

  9. Swift3.0语言教程获取字符串长度

    Swift3.0语言教程获取字符串长度 Swift3.0语言教程获取字符串长度,当在一个字符串中存在很多的字符时,如果想要计算字符串的长度时相当麻烦的一件事情,在NSString中可以使用length ...

最新文章

  1. 系统学习机器学习之算法评估
  2. WebService实例-CRM系统提供WebService实现用户注册功能
  3. Docker系列教程02-MongoDB默认开启鉴权
  4. [HIHO1323]回文字符串(区间dp)
  5. IBM DW上关于SOA的规范归纳
  6. leetcode509. 斐波那契数
  7. ocid oracle,Oracle数据库基础:新手推荐
  8. 五年,时间告诉我只有自己强大才是真的强大!
  9. easyui关于dialog弹出位置的问题记录
  10. 商场超市数据备份方案
  11. SQL2008系统统计函数
  12. 51单片机串行通信原理
  13. WIN7 vc2008【fatal error C1083: 无法打开文件:“Windows.h”: No such file or directory】【cl.exe link.exe手动调用编译】
  14. 我的世界服务器物品图标闪,我的世界中国版用资源包修改闪烁标的方法分享
  15. i.mx536 linux视频录制,linux mint 18.3下录制网站上的视频与声音的软件 vokoscreen 安装与使用...
  16. 超方便快捷搜索的油猴插件
  17. 计算机中硬盘容量的单位,硬盘容量的单位和计算单位是什么?
  18. 怎么锻炼java逻辑思维_托马斯逻辑训练板技高一筹,锻炼编程逻辑思维能力
  19. 关于触摸板设备USB映射虚拟桌面的VID与PID
  20. 新闻稿标题写作中的四大技巧

热门文章

  1. rrpp协议如何修改_RRPP快速环网保护协议
  2. 王者荣耀购买装备----笔记
  3. tryhackme--Overpass 2 - Hacked
  4. 75-CentOS-Docker构建nginx镜像
  5. 视频剪辑软件调研(Corel VideoStudio 2018、爱剪辑、微剪辑)
  6. (转)逃脱者可获生机(上)
  7. 转『天涯杂谈』那些让人惊艳的歌词(整理版),很经典,与大家分享。
  8. 破解Zip加密文件常用的几种方法
  9. 回望来时的路:构建之法东北师大站 2016春季学期
  10. Mysql各种缩写含义