命令行词典
这个程序是在命令行里调用第三方词典 API 查询然后把结果打印出来。这里面涉及到用 Go 发送 HTTP 请求,解析 JSON,代码生成等知识点。
词典 API
因为调用 API 肯定是先把要查的词上传上去,这个操作一般是 POST 请求,在开发者工具里面用网络选项卡找到这个请求:
然后看一下这个请求的负载和预览,是和自己要查的词还有返回的结果对应的,那应该找对位置了。
我要查的词是 snoopy:
然后负载是对的,
预览也是对的,和网页上渲染的结果文本一样
这样就是找对请求了。
首先看请求的负载,是一个 JSON,包括两个字段,source 是需要翻译的单词,trans_type 是从什么语言翻译成什么语言。
再回到头信息那里,有详细的请求头信息,响应头信息,这个请求实际上不简单,如果纯靠自己构造来写这个请求是个麻烦事,这里继续借用开发者工具来帮我们生成代码。
生成请求代码
在刚才的请求上面右键复制,复制 cURL (bash),这里因人而异,我在 WSL 2 里面用,复制这个就行,如果是在 Win 系统里应该是选 PowerShell 或者 cmd 版本的代码。
然后在终端里粘贴运行一下,返回的结果应该是一样的,我这里的结果是这样的:
可以看到返回的 JSON 里面中文全部变成 Unicode 编码了,后面转一下就好了。
这里要注意一个问题,抓包的时候如果电脑开了代理,那么后面命令行里面没有返回正确结果有可能是命令行里面没有走代理。解决的办法最简单就是如果能直接访问这个网站,那就先把浏览记录清理掉,然后再抓包,看这个请求的远端地址是不是还是自己本地的某个端口,如果还是这个端口那就等会,或者清理完浏览记录电脑关机重启,这样浏览器就不会走之前的缓存。确保再次抓包的结果是没有走代理的(也就是一个非本地地址配上 443 端口),这个时候再去拷贝 cURL 请求,命令行里同样是不走代理的,粘贴到命令行里运行就能得到正确的 JSON 了。
也有麻烦的版本,可以自己去查如何让命令行也走自己的代理,临时设置或者开机自启设置。
前面一直不给正确结果然后忘了这一茬,捣鼓好久,明日继续。