HydroOJ 从入门到入土(12)解决 codeforces 可以爬取但提交 Forbidden(>4.10.1)

发布时间 2024-01-03 13:27:25作者: Bowen404

故障内容

在使用Hydro(>4.10.1)的插件 vjudge 远程评测 codeforces 的题目的时候,会遇到题目可以正常爬,但是提交却显示Forbidden的问题。

故障分析

  1. 首先看网络。但题目可以正常爬,所以首先排除网络问题
  2. 搜索了一下相关问题,找到一条相关信息,说 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.
  1. 我自己并没有更新,也没有遇到这个问题,而群里的报错反馈是集中在一个时间之后,所以应该是在某次版本更新之后发生的问题。

  2. 找到最近几次提交,逐条分析更改内容,果然找到23.11.25的一条关于 UA 的修改(链接)。于是在群里提出建议,将 UA 改成或者常见 UA

  3. 经过多位群友认证,将 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,再次查看能否正常提交。