在线词典实战练习(一) | 青训营笔记

74 阅读1分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 13 天,今天对之前课程中的实战练习 —— 在线字典进行了简单的回顾,在这里进行小结

抓包

为了获取网页发送的请求内容,我们需要对网页进行抓包

找到网页点击翻译时发送的请求:

image.png

image.png

代码生成

将Post请求复制为cUrl

image.png

打开curlconverter.com,将代码转换为Go语言代码

image.png

这样我们就可以得到发送请求的代码:

package main

import (
   "fmt"
   "io"
   "log"
   "net/http"
   "strings"
)

func main() {
   client := &http.Client{}
   var data = strings.NewReader(`{"trans_type":"en2zh","source":"Introduction"}`)
   req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
   if err != nil {
      log.Fatal(err)
   }
   req.Header.Set("authority", "api.interpreter.caiyunai.com")
   req.Header.Set("accept", "application/json, text/plain, */*")
   req.Header.Set("accept-language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6")
   req.Header.Set("app-name", "xy")
   req.Header.Set("content-type", "application/json;charset=UTF-8")
   req.Header.Set("device-id", "")
   req.Header.Set("origin", "https://fanyi.caiyunapp.com")
   req.Header.Set("os-type", "web")
   req.Header.Set("os-version", "")
   req.Header.Set("referer", "https://fanyi.caiyunapp.com/")
   req.Header.Set("sec-ch-ua", `"Not_A Brand";v="99", "Microsoft Edge";v="109", "Chromium";v="109"`)
   req.Header.Set("sec-ch-ua-mobile", "?1")
   req.Header.Set("sec-ch-ua-platform", `"Android"`)
   req.Header.Set("sec-fetch-dest", "empty")
   req.Header.Set("sec-fetch-mode", "cors")
   req.Header.Set("sec-fetch-site", "cross-site")
   req.Header.Set("user-agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36 Edg/109.0.1518.78")
   req.Header.Set("x-authorization", "token:qgemv4jr1y38jyq6vhvi")
   resp, err := client.Do(req)
   if err != nil {
      log.Fatal(err)
   }
   defer resp.Body.Close()
   bodyText, err := io.ReadAll(resp.Body)
   if err != nil {
      log.Fatal(err)
   }
   fmt.Printf("%s\n", bodyText)
}

对上面的代码进行分析:

其中http.NewRequest就是通过创建http请求

req.Header.Set就是设置请求头

client.Do(req)则是发起请求

io.ReadAll(resp.Body)是在读取响应

知道了上面的这些操作后,我们就可以理解这段代码了,先编写一个http请求,然后编辑请求头,在发送请求后再接收请求返回的结果,将结果输出。

这时候运行代码,就会看到当前获取到的结果

image.png