逆向工程(三) 某翻译插件的请求模拟/语境翻译 API 获取
前言
本次逆向源于必须要学英语玩Apex。
接下来将详细记录我如何通过开发者工具模拟请求调用某词典的翻译工具, 尤其是语境翻译 功能。
环境
- Python 3
- 某词典翻译插件
顺着网线
分析
首先打开任意英文网页, 划词翻译一个单词, 插件会默认跳出语境翻译。
打开开发者工具, 筛选条件为 method:GET eudic, 找到名为 MiniDictSearch2?.. 的一条请求, 验证一下载荷:
word: pubs
context: I’m usually on pubs late night looking for teammates
因为这是一条 GET 请求, 我们直接复制请求网址试试能不能发现什么
https://dict.eudic.net/dicts/xxx?word=pubs&context=xxx
这个发现意味着什么呢?…某词典的服务器是直接接收明文的上下文语句的…
这个 URL 主要包含两个参数:
word=pubs: 要查询的单词。context=...: 选中的上下文语句,使用 URL 编码(观察更多可以总结:%20代表空格,%2C代表逗号,%E2%80%99代表’)。
这个发现意味着什么呢?
- 某词典的服务器是直接接收明文的上下文语句的 这可能为我们理解它的提示词策略提供了更直接的线索!
- 可以尝试修改这个 URL 中的参数 例如,我们可以修改
pubs参数来查询不同的单词,或者修改context参数来测试不同的上下文语句,看看 AI 翻译的结果会如何变化。 - 我们可以用 Python 脚本来构造和发送这些请求 我们可以使用
requests库来发送 HTTP 请求,并解析返回的结果。这样我们就可以自动化地进行大量的测试,并分析 AI 翻译的规律。
行动
我将 pubs 改成这个上下文中任一单词, 其他不变, 构造网址, 依然可以成功获取翻译信息。确认了请求 URL 的构造. 只要 word 后面添加任意单词: https://dict.eudic.net/dicts/xxx?word=hello 就是相当于在网页上查找单词, 但是并不是常规的用户搜索界面。而是像下面这种。

如果 https://dict.eudic.net/dicts/xxx?word=world&context=Hello%20world 后面加上上下文, 就会在 AI 解释那边自动默认显示语境翻译

另外, 有两个地方可以找到最关键的请求接口: https://dict.eudic.net/dicts/xxx
- 依然在刚才的开发者工具页面, 过滤
ai/method:POST。 - 在
https://dict.eudic.net/dicts/xxx?word=pubs&context=xxx网页中, 按 F12, 同 1 的过滤条件也可以发现这个接口。
显然这个应该是导向某词典内部的 AI 语境翻译的源头接口。这个接口就不能直接网页转到, HTTP 错误码 500。
初步分析
-
不同的接口,不同的功能:
https://dict.eudic.net/dicts/xxx看起来更像是一个“通用”的单词查询接口,当只提供word参数时,它会返回一个标准的单词释义页面(就像截图中的那样)。- 而当同时提供
word和context参数时,MiniDictSearch2接口的结果中会包含 AI 解释,并且默认显示“语境”翻译。 https://dict.eudic.net/dicts/xxx则更像是专门负责“AI 语境翻译”的接口。
-
AiExplainTabStream接口的特点:- 它是一个 POST 请求,这与
MiniDictSearch2的 GET 请求不同。 - 它返回的数据类型是
text/event-stream,这是一种用于服务器发送更新到客户端的流数据格式,通常用于实时应用,例如聊天、股票行情等。这说明某词典的 AI 语境翻译可能是以流的形式逐步生成的。
- 它是一个 POST 请求,这与
-
关于
MiniDictSearch2接口的更多发现:- 只能支持一个单词/字母:
MiniDictSearch2接口在用于语境翻译时,只能支持一个单词或字母
- 只能支持一个单词/字母:


680

被折叠的 条评论
为什么被折叠?



