ripperhe / Bob

Bob 是一款 macOS 平台的翻译和 OCR 软件。
https://bobtranslate.com
8.93k stars 511 forks source link

网络接口中的 Cookie 如何清理 #106

Open choyri opened 3 years ago

choyri commented 3 years ago

运行环境

描述问题

使用 谷歌翻译插件 的时候,近期发现一直出现错误提示「服务异常: 秘钥获取失败」。

在阅读代码后,发现错误是 这里 抛出的,在其上边使用了 $http.get 进行请求。

接着抓包,发现请求的时候,带了一个 Cookie,如图

然后,使用 Paw 测试,不带 Cookie 时请求,谷歌会返回这个 key 的 Cookie,且返回的 body 中带有插件代码中所用到的 tkk;如果手动配置抓包得到的那个 Cookie,返回内容中是没有 tkk 的,因此,谷歌翻译插件一直报错。

这个 $http 接口是 Bob 本体提供的,所以特来此请求作者帮助。

/cc @roojay520

roojay520 commented 3 years ago

经过排查发现这个 Cookie 是 Google 加上的,用来作为用户身份唯一标识符:https://stackoverflow.com/questions/51348078/google-nid-cookie

google.cn 域名目前应该做了防滥用限制,导致无法获取到 token 值,google.com 则没有这个限制。

临时解决方案:先使用一次 google.com 翻译,获取到 token 值之后再切回 google.cn 使用。

https://github.com/roojay520/bobplugin-google-translate/issues/3#issue-735906054

choyri commented 3 years ago

@roojay520 google.com 也是带 Cookie 的,同样的错误,抓包 如图。 通过断点删掉 Request 中的旧 Cookie,现在获取到新的 Cookie,终于可以继续用一段时间了 😢

roojay520 commented 3 years ago

@choyri 我刚才测试 google.com 的可以,google.cn 的不可以,按照你的测试有可能是 google 近期加强了反爬策略

choyri commented 3 years ago

@roojay520 我觉得不管是 com 还是 cn,一直都有 NID 的 Cookie,不过现在因为某些原因,导致它「过期」了,从而无法返回标准的结果。

liwuxi commented 3 years ago

同无法解决问题

roojay520 commented 3 years ago

@liwuxi @choyri 我尝试直接在 header cookie 中加了一个 NID 貌似能用了,目前需要更多测试 https://github.com/roojay520/bobplugin-google-translate/releases/tag/v0.3.3

choyri commented 3 years ago

@roojay520 我看了下你的 改动,好像有点「暴力」 😅 假设 NID 的值会到期,或者被拉黑,那么插件必须更新才可以继续使用了。 我试着给 Cookie 赋空值,也是可以的,这应该比赋非空固定值好一点。 后续继续观察 🤪

choyri commented 3 years ago

@roojay520 那个写死的 NID 已挂 😑 研究了下,似乎是谷歌翻译改版了。把 这一行 删掉,token 值赋空,将就继续用。

choyri commented 3 years ago

本 Issue 的 Label 应该改成 enhancement(但是我没权限,无法操作)。 是否需要提供清理 Cookie 的接口,仍需观察。

ripperhe commented 3 years ago

@choyri 已修改为 enhancement。

@roojay520 Cookie 这个问题跟 Bob 有关系吗?需要调整不?

choyri commented 3 years ago

@ripperhe 最开始 bobplugin-google-translate 请求谷歌翻译的接口是不处理 Cookie 的,自动接收和发送字段名为 NID 的 Cookie;后该值因未知原因(到期或其他)失效,导致插件报错失效。 于是我提了这个 Issue,希望 Bob 提供处理 Cookie 的接口,比如清理 Cookie。(尝试手动清理,插件恢复正常) 后 bobplugin-google-translate 更新,写死了 Cookie;安心用了一个月,一直到前几天,插件再次报错失效。 今天我研究了一下,发现谷歌翻译更新了,出现了新的问题(等待适配),和之前的 Cookie 问题并不重合。 因此,@ripperhe 可以综合其他的反馈建议,看是否为 Bob 提供清理 Cookie 的接口。

ripperhe commented 3 years ago

@choyri 好的,了解了。🤝 请问一下你是如何「手动清理」Cookie 的?

choyri commented 3 years ago

@ripperhe 这里,用 Charles 断点删除请求体中的 Cookie 😅

ripperhe commented 3 years ago

@choyri 😅 好的,看到了