在线词典的实现 | 豆包 MarsCode AI 刷题

147 阅读2分钟

在线词典的实现

使用Go发送http请求,解析JSON,使用代码生成提高开发效率的实践

抓包

  • 在我们输入词语,点击翻译,网页返回翻译的过程背后,网站究竟做了什么?:flushed:
  • 让我们用开发者工具解剖背后的实现过程 右键网页,选择检查,在弹出的侧栏里选中Network,然后尝试输入一个单词,此时开发者工具会弹出一系列请求,选中dict开发者工具 我们看到Headers里表示这是一个POST请求。进一步点开Payload载荷 发出的JSON里含有我们的请求,比如
{trans_type: "en2zh"}

代表了我们想将英语转换为中文


代码生成

  • 使用代码生成工具快速生成请求

    1. 复制网站的curl 复制curl
    2. 将复制到的curl粘贴到工具的输入栏里, 生成 看到下方已经给出了完整的命令
    • 对命令的解释 解释
    • 行14 创建了一个使用POST方法向对应url发送的请求存储在req
    • 行18-36 设置请求头
    • 行37 发起请求,获取输入流放在resp
    • 行41^ 结束输入流,防止数据泄露
    • 行42 将Body部分转成byte数据存入bodyText
    1. 运行代码,应当能看到返回的JSON数据, 结果
  • 由于我们需要可变的请求,而生成的代码只能生成特定的请求,我们对生成部分代码做更改 新的生成

    • 定义结构体
    • 行18 初始化一个request结构体
    • 行19 将request转化成byte数组
    • 行23 把byte数组转化成data

  • 使用工具生成结构体
    1. 我们用同样的办法找到网站的返回值返回
    2. 理论上可以手搓结构体然后UnMarshall——超累的,Ctrl+C然后打开工具(视情况可能要动用第三方工具copy)转换 此处可以直接用嵌套
    3. 修改处理输入流的部分处理流
      • 行79 将返回的body部分反序列化并填入dictResponse,注意需要**&**才能写入
    4. 运行代码,应当能看到比上一次长——这么多的返回返回

  • 修改输入输出部分,完善整个函数
    • 修改输出部分为需要的信息输出格式
    • 更改函数名为query,把硬输入***“good”换成word***更改函数名
    • 最后add一个优雅的main函数主函数
      • 行72 判断除了函数名有无有效输入
    • 运行试试结果 成功喵:cat:

通过提供api和正确的结构体,我们就能实现自动向网站发送请求并处理返回的数据. 会不会有更有意思的玩法呢?

今日推荐:没有考试的水课