HydroOJ 从入门到入土(12)解决 codeforces 可以爬取但提交 Forbidden(>4.10.1)
故障内容
在使用Hydro(>4.10.1)的插件 vjudge 远程评测 codeforces 的题目的时候,会遇到题目可以正常爬,但是提交却显示Forbidden
的问题。
故障分析
- 首先看网络。但题目可以正常爬,所以首先排除网络问题。
- 搜索了一下相关问题,找到一条相关信息,说
UA
可能影响在codeforces的提交(链接):
It's a problem about User-Agent. I'll stop sending them.
They accepts the usual UA like Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 or just no UA, but denies others. It seems implemented based on an allowlist.
I think that they should use denylist instead and accepting the no UA is just their bug.
-
我自己并没有更新,也没有遇到这个问题,而群里的报错反馈是集中在一个时间之后,所以应该是在某次版本更新之后发生的问题。
-
找到最近几次提交,逐条分析更改内容,果然找到23.11.25的一条关于
UA
的修改(链接)。于是在群里提出建议,将UA
改成无
或者常见 UA
。 -
经过多位群友认证,将 UA 改掉之后即可正常提交。
解决方法
进入服务器命令行,输入:
vi +15 /usr/local/share/.config/yarn/global/node_modules/@hydrooj/vjudge/src/fetch.ts
将原来的 15 行(如果有更改,注意上下瞅瞅)改为常见 UA,比如 Chrome 的 UA:
//const UA = `Hydro/${global.Hydro.version.hydrooj} VJudge/${global.Hydro.version.vjudge}`;
const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
保存退出后,重启 HydroOJ,再次查看能否正常提交。