第二视频练习(抓取搜狗翻译)| 青训营笔记
data所需要的数据不是json,而是 URL 编码的字符串。
可以使用 Go 的 net/url 包来将结构体转换为 URL 编码的字符串。
将 DictRequest 结构体转换为 URL 编码的方法
可以使用 Go 的 net/url 包来将结构体转换为 URL 编码的字符串。
以下是将 DictRequest 结构体转换为 URL 编码的字符串的示例代码:
package main
import (
"fmt"
"net/url"
)
type DictRequest struct {
From string `json:"from"`
To string `json:"to"`
Client string `json:"client"`
Text string `json:"text"`
UUID string `json:"uuid"`
PID string `json:"pid"`
AddSugg string `json:"addSugg"`
}
func main() {
a := DictRequest{
From: "auto",
To: "zh-CHS",
Client: "web",
Text: "hello",
UUID: "fdb4d454-cc47-465a-b018-9db29f85ab9b",
PID: "sogou-dict-vr",
AddSugg: "on",
}
///看这里
v := url.Values{} //使用 `url.Values` 创建一个空的 URL 值对象
v.Set("from", a.From) //并使用 `Set` 方法设置每个字段的值
v.Set("to", a.To)
v.Set("client", a.Client)
v.Set("text", a.Text)
v.Set("uuid", a.UUID)
v.Set("pid", a.PID)
v.Set("addSugg", a.AddSugg)//
queryString := v.Encode() //使用 `Encode` 方法将 URL 值对象编码为 URL 编码的字符串。
fmt.Println(queryString)
////
}
结果将输出:from=auto&to=zh-CHS&client=web&text=hello&uuid=fdb4d454-cc47-465a-b018-9db29f85ab9b&pid=sogou-dict-vr&addSugg=on。
在这个示例中,我们使用 url.Values 创建一个空的 URL 值对象,并使用 Set 方法设置每个字段的值。然后,使用 Encode 方法将 URL 值对象编码为 URL 编码的字符串。
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"net/url"
"strings"
)
type DictRequest struct {
From string `json:"from"`
To string `json:"to"`
Client string `json:"client"`
Text string `json:"text"`
UUID string `json:"uuid"`
PID string `json:"pid"`
AddSugg string `json:"addSugg"`
}
//这个是json的主体部分
type AutoGenerated struct {
Zly string `json:"zly"`
Message string `json:"message"`
Code int `json:"code"`
UUID string `json:"uuid"`
Sugg []Sugg `json:"sugg"`
Direction string `json:"direction"`
}
type Sugg struct {
K string `json:"k"`
V string `json:"v"`
}
//获取到post数据
func main() {
var word string
fmt.Println("请输入要查询的单词")
fmt.Scanf("%s",&word)
client := &http.Client{}
a := DictRequest{
From: "auto",
To: "zh-CHS",
Client: "web",
Text: word,
UUID: "fdb4d454-cc47-465a-b018-9db29f85ab9b",
PID: "sogou-dict-vr",
AddSugg: "on",
}
v := url.Values{}
v.Set("from", a.From)
v.Set("to", a.To)
v.Set("client", a.Client)
v.Set("text", a.Text)
v.Set("uuid", a.UUID)
v.Set("pid", a.PID)
v.Set("addSugg", a.AddSugg)
queryString := v.Encode()
//fmt.Println(queryString)
var data = strings.NewReader(queryString)
//var data = strings.NewReader(`from=auto&to=zh-CHS&client=web&text=hello&uuid=fdb4d454-cc47-465a-b018-9db29f85ab9b&pid=sogou-dict-vr&addSugg=on`)
req, err := http.NewRequest("POST", "https://fanyi.sogou.com/reventondc/suggV3", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Accept", "application/json")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,en-GB;q=0.6")
req.Header.Set("Cache-Control", "no-cache")
req.Header.Set("Connection", "keep-alive")
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Cookie", "ssuid=940679152; SUID=D23AE7781F49910A00000000639ACC7E; cuid=AAH+mBAFRgAAAAqHS07gkAEANgg=; SUV=1689238283241317; LSTMV=86%2C532; LCLKINT=2153763; ABTEST=2|1690344667|v17; SNUID=D34E49EEE0D9E1BCE9AAE3C8E095DBD4; wuid=1690344667584; FQV=0a1d247370350cf6558d48a98fde7304; translate.sess=5d078bf7-880c-402d-a644-29c6861bbe18; SGINPUT_UPSCREEN=1690344669163")
req.Header.Set("Origin", "https://fanyi.sogou.com")
req.Header.Set("Pragma", "no-cache")
req.Header.Set("Referer", "https://fanyi.sogou.com/text")
req.Header.Set("Sec-Fetch-Dest", "empty")
req.Header.Set("Sec-Fetch-Mode", "cors")
req.Header.Set("Sec-Fetch-Site", "same-origin")
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183")
req.Header.Set("sec-ch-ua", `"Not/A)Brand";v="99", "Microsoft Edge";v="115", "Chromium";v="115"`)
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("sec-ch-ua-platform", `"Windows"`)
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)
var shuju AutoGenerated //respond结构体
err = json.Unmarshal(bodyText,&shuju)
if err != nil {
fmt.Println("转换失败")
}
//打印翻译
for _,name := range shuju.Sugg{
fmt.Println(name)
}
}