如何破解对方接口仅允许浏览器发出的访问限制?

我要去别的网站刷数据,对方接口拦截访问,具体问题如下:
一个对方网站的接口,post数据,我使用node+puppeteer 模拟浏览器去访问,本地执行,数据提交成功。
同样的代码后台执行则失败,接口访问拦截。

初步判断原因:
对方接口仅允许通过浏览器方式发送的请求,其他方式访问拦截。
因为node+puppeteer在本地访问时可携带header信息完全模拟浏览器访问,但后台执行时只能无header模式。

以下是通过浏览器访问该接口是的所有header请求头信息:

img

我在后台通过node+https尝试修改user-agent,携带cookie等都无效依然被拦截,各位有相关实操经验的能否指条明路,这种情况怎么搞?

从你的描述来看,的确存在一些接口仅允许通过浏览器方式发送请求的情况。这是因为网站为了防止被机器人或爬虫恶意攻击,对于非浏览器发送的请求可能会进行一些验证或限制。

你可以尝试在后台执行的代码中使用 Puppeteer 模拟浏览器的方式去访问该接口。具体可以参考 Puppeteer 的官方文档,其中有介绍如何在 headless 模式下使用 Puppeteer 模拟浏览器的方式去访问网站。同时,你还可以尝试使用其他工具如 selenium 等模拟浏览器去访问该接口,以达到绕过验证或限制的效果。

参考自chatGPT
如果对方网站的接口确实只允许通过浏览器方式发送请求,那么在后台执行时就需要考虑如何模拟浏览器发送请求。以下是一些可能的解决方案:

1.使用无头浏览器:无头浏览器是一种没有图形界面的浏览器,可以通过编程的方式控制浏览器行为。常见的无头浏览器有 Chrome Headless 和 Firefox Headless 等。使用无头浏览器可以完全模拟浏览器的行为,包括发送请求时携带的 header 信息,因此可以解决后台执行时只能无 header 模式的问题。

2.使用代理:如果无法使用无头浏览器,可以考虑使用代理。代理可以将请求转发到浏览器中,从而模拟浏览器发送请求。常见的代理有 BrowserMob Proxy、Selenium Proxy 等。使用代理时需要注意,需要将代理服务器配置在浏览器中,以便浏览器能够将请求转发到代理服务器中。

3.分析浏览器发送的请求:如果无法使用无头浏览器或代理,可以尝试分析浏览器发送的请求,然后在后台执行时使用相同的请求参数。可以使用浏览器的开发者工具分析请求,包括请求的 URL、请求参数、请求头等。但是这种方法需要对请求的分析能力较强,并且可能需要不断地更新请求参数,因为对方网站可能会随时更改接口参数。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^