如何本地调试有IP限制的三方接口
经常碰到三方接口有ip限制,需要将我们这边的ip地址加入对方的白名单才能进行访问测试。
这就给测试增加了难度,有以下原因
- 本地 ip 是动态的
- 不允许将本地 ip 提供给三方
以前每次测试都提交到测试环境,然后测试,改动多的话就会特别麻烦。
后面查找有没有方法本地就可以测试,发现http代理可以实现,配合guzzle的代理使用特别方便。
resolver x.x.x.x; #指定DNS服务器IP地址(需替换成自己的)
location / {
proxy_pass https://$http_host$request_uri; #设定代理服务器的协议和地址
proxy_set_header HOST $http_host;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0k;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_next_upstream error timeout invalid_header http_502;
}
但是这个有几个问题
- 没有防护,所有人都能使用此代理(已经看到很多访问了:()
- 目前没法通过域名设置代理,只能通过 ip 加端口,所以代理都是
127.0.0.1:8080
这种。 - 没法直接访问 https 请求,需要将改成 http 在
proxy_pass
指定协议 https (每次设置都很麻烦)
大家有没有“优雅”的方式调试这种三方 ip 限制的接口?
最近我也遇到类似的情况。我这边是这样,第三方服务的api会限制ip,而且只能填一个。我现在的做法是第三方服务的平台中填写服务器A的ip,然后在服务器A上写一个转发程序,本地服务器B或者其他服务器C调用服务器A上的转发程序,服务器A再把接收到的数据提交到第三方服务。
:sweat_smile: 标准流程应该是自己做 mock 吧。
A 做个代理服务器,然后其他服务器使用 socks 访问
找台云服务器,搭建个nginx转发一下,第三方平台配置云服务器ip。
白名单加你们自己公司的一台机器的IP(比如测试环境机器的公网IP)
然后再在这台机器上转个代理
本地请求通过这台机器的代理去请求即可
workerman很快就能搭建http代理服务器
感谢大家的反馈,测试过 nginx 转发 http 和 https,一直没有成功。原来一直没有找到合适的解决方案就搁置了,后来是使用 golang 写了个简单的代理解决的。只能感叹 chatgpt 的强大。
该代码实现了http 和 https 转发;添加了用户认证,防止别人来调用(自己的服务器差点被打趴下了)。 guzzle 调用示例