Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
特点:
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
下载安装:
环境变量配置:此电脑->属性->高级系统设置->环境变量
系统环境变量
| GOROOT | Go的安装文件路径eg:D:\Go |
|---|---|
| GOPATH | Go的工作环境路径eg:E:\go-workspace |
Path中加入:%GOROOT%\bin
win + r,输入cmd进入命令终端,go env 查看配置信息
解决go包无法下载问题:
go env -w GOPROXY=https://goproxy.cn,direct
go工作目录配置建议如图:
go使用火山云翻译实现在线简单词典
抓包
打开火山翻译首页translate.volcengine.com/,按F12打开以下页面。
解析response bodyoktools.net/json2go
完整代码如下:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"os"
)
type DictRequest struct {
Source string `json:"source"`
Words []string `json:"words"`
SourceLanguage string `json:"source_language"`
TargetLanguage string `json:"target_language"`
}
type DictResponse struct {
Details []struct {
Detail string `json:"detail"`
Extra string `json:"extra"`
} `json:"details"`
BaseResp struct {
StatusCode int `json:"status_code"`
StatusMessage string `json:"status_message"`
} `json:"base_resp"`
}
type DictResponseData struct {
Result []struct {
Ec struct {
ReturnPhrase []string `json:"returnPhrase"`
Synonyms []struct {
Pos string `json:"pos"`
Words []string `json:"words"`
Trans string `json:"trans"`
} `json:"synonyms"`
Etymology struct {
ZhCHS []struct {
Description string `json:"description"`
Detail string `json:"detail"`
Source string `json:"source"`
} `json:"zh-CHS"`
} `json:"etymology"`
SentenceSample []struct {
Sentence string `json:"sentence"`
SentenceBold string `json:"sentenceBold"`
Translation string `json:"translation"`
Source string `json:"source"`
} `json:"sentenceSample"`
WebDict string `json:"webDict"`
Web []struct {
Phrase string `json:"phrase"`
Meanings []string `json:"meanings"`
} `json:"web"`
MTerminalDict string `json:"mTerminalDict"`
RelWord struct {
Word string `json:"word"`
Stem string `json:"stem"`
Rels []struct {
Rel struct {
Pos string `json:"pos"`
Words []struct {
Word string `json:"word"`
Tran string `json:"tran"`
} `json:"words"`
} `json:"rel"`
} `json:"rels"`
} `json:"relWord"`
Dict string `json:"dict"`
Basic struct {
UsPhonetic string `json:"usPhonetic"`
UsSpeech string `json:"usSpeech"`
Phonetic string `json:"phonetic"`
UkSpeech string `json:"ukSpeech"`
ExamType []string `json:"examType"`
Explains []struct {
Pos string `json:"pos"`
Trans string `json:"trans"`
} `json:"explains"`
UkPhonetic string `json:"ukPhonetic"`
WordFormats []struct {
Name string `json:"name"`
Value string `json:"value"`
} `json:"wordFormats"`
} `json:"basic"`
Phrases []struct {
Phrase string `json:"phrase"`
Meanings []string `json:"meanings"`
} `json:"phrases"`
Lang string `json:"lang"`
IsWord bool `json:"isWord"`
} `json:"ec"`
} `json:"result"`
}
func query(word string) {
client := &http.Client{}
request := DictRequest{Source: "youdao", Words: []string{word}, SourceLanguage: "en", TargetLanguage: "zh"}
buf, err := json.Marshal(request)
if err != nil {
log.Fatal(err)
}
var data = bytes.NewReader(buf)
req, err := http.NewRequest("POST", "https://translate.volcengine.com/web/dict/detail/v1/?msToken=&X-Bogus=DFSzswVLQDaZVIDktx7DBl9WX7nO&_signature=_02B4Z6wo00001L.7d5QAAIDAP.mN1gUfR-C.-3MAAEsXeuwCHy8aLlGJDPMXPl7ghj9UERhzp5yvR2W.kXtn1GUPJQFo2gCh7j66KNu6XT3J2dsVTbKzk182qbknXaMl-M4KoWyOALE3-Jvlad", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("authority", "translate.volcengine.com")
req.Header.Set("accept", "application/json, text/plain, */*")
req.Header.Set("accept-language", "zh-CN,zh;q=0.9,en-US;q=0.8,en-CN;q=0.7,en;q=0.6")
req.Header.Set("content-type", "application/json")
req.Header.Set("cookie", "x-jupiter-uuid=169319391604024; i18next=zh-CN; s_v_web_id=verify_llubxvj8_p1NoLbyP_3WPB_41iK_8iaF_9EDbCm9LQ6o4; ttcid=d44d010ccecc4a1bb1ee2cbd7c5b94aa18; tt_scid=YH3nzGmQuWhdiKi3qTdqr1wGT3rOr4AH7RUtb7WCMvWwEwiHgV7461G4WZjkLr4sb157")
req.Header.Set("origin", "https://translate.volcengine.com")
req.Header.Set("referer", "https://translate.volcengine.com/?category=&home_language=zh&source_language=detect&target_language=zh&text=good")
req.Header.Set("sec-ch-ua", `"Chromium";v="116", "Not)A;Brand";v="24", "Google Chrome";v="116"`)
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("sec-ch-ua-platform", `"Windows"`)
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/116.0.0.0 Safari/537.36")
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)
}
if resp.StatusCode != 200 {
log.Fatal("bad StatusCode: ", resp.StatusCode, "body", string(bodyText))
}
var dictResponse DictResponse
err = json.Unmarshal(bodyText, &dictResponse)
if err != nil {
log.Fatal(err)
}
var item = dictResponse.Details[0]
jsonStr := item.Detail;
var dictData DictResponseData
err = json.Unmarshal([]byte(jsonStr), &dictData)
if err != nil {
log.Fatal(err)
}
for _, content := range dictData.Result[0].Ec.Basic.Explains {
fmt.Println(content.Pos, content.Trans)
}
}
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(word)
}
SOCKS5代理
SOCKS是一种网络传输协议,名字取自SOCKetS[注 1],主要用于客户端与外网服务器之间通讯的中间传递。
当防火墙后的客户端要访问外部的服务器时,就跟SOCKS代理服务器连接。这个代理服务器控制客户端访问外网的资格,允许的话,就将客户端的请求发往外部的服务器。
这个协议最初由David Koblas开发,而后由NEC的Ying-Da Lee将其扩展到SOCKS4。最新协议是SOCKS5,与前一版本相比,增加支持UDP、验证,以及IPv6。
根据OSI模型,SOCKS是会话层的协议,位于表示层与传输层之间。SOCKS协定不提供加密。
SOCKS工作在比HTTP代理更低的层次:SOCKS使用握手协议来通知代理软件其客户端试图进行的SOCKS连接,然后尽可能透明地进行操作,而常规代理可能会解释和重写报头(例如,使用另一种底层协议,例如FTP;然而,HTTP代理只是将HTTP请求转发到所需的HTTP服务器)。虽然HTTP代理有不同的使用模式,HTTP CONNECT方法允许转发TCP连接;然而,SOCKS代理还可以转发UDP流量(仅SOCKS5),而HTTP代理不能。HTTP代理通常更了解HTTP协议,执行更高层次的过滤(虽然通常只用于GET和POST方法,而不用于CONNECT方法)。
Socks5代理可以用于多种用途,包括:
- 绕过防火墙和地理限制:通过连接到位于其他地区的Socks5代理服务器,用户可以访问被地理限制的内容,或是绕过网络防火墙的限制。
- 隐私保护:Socks5代理可以隐藏用户的真实IP地址,增强个人隐私和匿名性。这对于需要保护个人信息的用户来说是有用的。
- 访问受限网站:有些网站可能在特定地区被封锁,通过连接到Socks5代理,用户可以访问这些受限制的网站。
- 网络爬虫和数据采集:研究人员和开发者可以使用Socks5代理来采集互联网上的数据,同时减少被目标网站封锁的风险。
| VER | NMETHODS | METHODS |
|---|---|---|
| 1 | 1 | 1-255 |
-
VER是SOCKS版本,0x05
-
NMETHODS是METHODS部分的长度
-
METHODS是客户端支持的认证方式列表,每个方法占1字节。
- 0x00不需要验证
- 0x01GSSAPI
- 0x02用户名、密码认证
- 0x03-0x07由IANA分配