请教各位一个 HTTP 代理问题:项目里调用第三方 API 拿数据,在 A 机器上直接 http 请求 API,和把 A 机器当作 HTTP 代理,在 B 机器请求 API,效果是一样的吗?第三方 API 会不会查出来是用来代理?

2023-01-08 23:14:59 +08:00
 0x0208v0

如题。因为某些原因,需要调用 API 的时候,IP 是固定的。
大家讨论了一下,有两个方案产出:
1. 直接在 IP 对应的 A 机器上请求   
2. 把 IP 对应的 A 机器当作 HTTP 代理服务器,真正调用在 B 机器上 

由于不太确定 HTTP 代理的机制,不知道第三方会不会能查到用了代理

所以请教各位。  

PS:由于时间有限,最后用了方案1,比较保守。但方案1需要在A机器上部署代码,比较繁琐。。。

1408 次点击
所在节点    程序员
11 条回复
xuanbg
2023-01-08 23:19:42 +08:00
代理和直接访问还是有区别的。既然对方限制访问 IP ,估计简单代理是不行的。不过对于固定的 API ,完全可以在 A 机器上运行一个调用第三方 API 的服务,这服务部署好了就不需要动,还是可以接受的。
CEBBCAT
2023-01-08 23:23:57 +08:00
可以复习一下计算机网络。API 他能拿到的无非是 HTTP 请求。侧信道就是请求时间、频率等。

HTTP 请求有请求头和请求体,最显眼的是 UA 。

你要不还是写一个业务代理吧,就是类似“请求网关”这样的概念。需要调用 API 的时候请求 A 上的内部服务,让它构造一个请求,发到 API ,然后再把报文返回。
CEBBCAT
2023-01-08 23:25:53 +08:00
@xuanbg #1 有点不解,既然都用 HTTP 代理了,又如何用 IP 限制到 B 呢?这时候通过 TCP 层面,只能看到 A 的 IP 吧。

你说的是 HTTP 代理服务器会加 Header 这种情况是吗?
xuanbg
2023-01-08 23:31:05 +08:00
@CEBBCAT 你抓个包就知道区别了呀。
CEBBCAT
2023-01-08 23:38:54 +08:00
@xuanbg #4 虽然抓包有点麻烦,但也不是不行,请问对于问题复现你有没有要求的 HTTP 代理实现版本号?或者我找一个流行实现就可以。

但我还是觉得,最好还是直接说道理比较快捷。
ragnaroks
2023-01-09 00:21:57 +08:00
代理依据泄露客户端信息的多少分为透明代理、匿名代理、精英代理。

透明代理:服务端知道客户端在使用代理,并且知道代理和客户端是两个独立。

匿名代理:服务端知道客户端在使用代理,但是只能看到代理的信息,看不到客户端的信息。

精英代理:服务端不知道客户端在使用代理。

按你的需求,透明代理就行了,常见实现就是 A 开个 socks5 服务端,B 直接在请求时附加代理即可。不确定你使用何种技术栈,但是主流标准库库或框架都可以实现类似于 httpClient.setSocksProxy(address,port) 的代理附加。
ragnaroks
2023-01-09 00:24:47 +08:00
上文有些字词有多个意思,而且代理本身也分正向代理和反向代理,且针对你的需求来说正向反向都能实现。我的建议时先不要考虑那么多,直接起个 socks5 用着,接口那边找过来再改。
IvanLi127
2023-01-09 00:28:51 +08:00
A 机器用高匿代理一般就不会知道了。HTTP 头不传 forward 字段应该就差不多了。或者你直接用三层及以下的代理,应该就无感了
lcy630409
2023-01-09 09:10:39 +08:00
给你一个最简单的办法
A 机器 直接
firewall-cmd --add-forward-port=port=443:proto=tcp:toport=443:toaddr=1.1.1.1 --permanent

unco020511
2023-01-09 10:37:35 +08:00
很简单,你把「 A->API 服务器」和「 A ->B -> API 服务器」的 http 请求抓取出来一对比,就知道是否有区别,如果有区别,API 服务器就有可能识别,或者你可以想办法处理成无区别
mango88
2023-01-09 12:32:33 +08:00
nginx 反代 API

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/907449

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX