后端与Go|青训营笔记

69 阅读1分钟

这是我参与[第五届青训营]伴学笔记创作的第一天

利用Go实现在线查词Demo

实现原理:

  • 利用http请求一个在线翻译网页;
  • 然后在控制台输入单词,将数据序列化发送给网页;
  • 把网页返回过来的结果进行解析。

1 Go 实现简单的在线词典

1.1 chrome浏览器打开火山翻译,右键检查 输入一个单词进行翻译,发起请求,查看Network中的Headers是post请求的,并且Response里有翻译内容的 image.png

1.2 获取cURL(bash)

image.png

1.3 实现go代码

将复制的URL粘贴到该网站,即可生成对应的go代码。 代码转换

image.png

编写结构体如下

type DictRequest struct {
   TransType string `json:"trans_type"`
   Source    string `json:"source"`
   UserID    string `json:"user_id"`
}

通过代码访问在线翻译网页获取数据

client := &http.Client{}
var data = strings.NewReader(`{"trans_type":"en2zh","source":"good"}`)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
if err != nil {
   log.Fatal(err)
}
req.Header.Set("Connection", "keep-alive")
req.Header.Set("DNT", "1")
req.Header.Set("os-version", "")
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36")
req.Header.Set("app-name", "xy")
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
req.Header.Set("Accept", "application/json, text/plain, */*")
req.Header.Set("device-id", "")
req.Header.Set("os-type", "web")
req.Header.Set("X-Authorization", "token:qgemv4jr1y38jyq6vhvi")
req.Header.Set("Origin", "https://fanyi.caiyunapp.com")
req.Header.Set("Sec-Fetch-Site", "cross-site")
req.Header.Set("Sec-Fetch-Mode", "cors")
req.Header.Set("Sec-Fetch-Dest", "empty")
req.Header.Set("Referer", "https://fanyi.caiyunapp.com/")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
req.Header.Set("Cookie", "_ym_uid=16456948721020430059; _ym_d=1645694872")
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)
}
fmt.Printf("%s\n", bodyText)

将返回的结果进行解析,方便操作:JSON转Golang Struct - 在线工具 - OKTools 生成如下结构体:

image.png

最后运行程序结果如下: 在控制台输入一个单词,然后返回发音与翻译。

image.png

详细代码查询:Go实现在线查词