我如何拦截第三方https请求调用,阻止它出去并发送我自己的响应?有可能吗?
How can i intercept third-party https request call, block it from going out and send my own response? Is it possible to do?
我可以记录所有通过 sdk 函数发生的对第三方的传出 api 调用,但我需要阻止它们传出并提供我自己的自定义答案。我知道有像 Nock 这样的服务我可以使用,但它们不适合我的需要。或者,如果有人可以解释 Nock 如何拦截所有传出请求并在 api 与定义的模式匹配时用我们提供的虚拟响应替换它们,那就太好了。
唯一万无一失的机制是将代理设置为一个单独的进程,所有出站连接都通过挂接到 OS。这可以在您现有的服务器上完成,也可以作为您的网络网关基础设施的一部分(例如在网络级别)。这类似于 Ethereal 或 Wireshark 等网络嗅探应用程序所做的事情。
否则,您可以尝试修补 nodejs 库中的各种入口点,例如 http.get()
和 http.request()
(以及 https 对应项)以拦截第 3 方库可以使用的各种方式nodejs 库从我们的应用程序建立出站连接(这就是 Nock 所做的)。这并非完全万无一失,因为第三方库可以使用他们自己的本机代码模块绕过 built-in nodejs 库来进行自己的网络,但这是第三方代码发出出站 http 请求的常用方式。
此 http 拦截器也不会涵盖其他类型的 TCP 或 UDP 连接,除非您也尝试通过它们的库接口拦截它们。
您可以查看这个相当低级别的库 node-request-interceptor 以开始进行 http 拦截。
我可以记录所有通过 sdk 函数发生的对第三方的传出 api 调用,但我需要阻止它们传出并提供我自己的自定义答案。我知道有像 Nock 这样的服务我可以使用,但它们不适合我的需要。或者,如果有人可以解释 Nock 如何拦截所有传出请求并在 api 与定义的模式匹配时用我们提供的虚拟响应替换它们,那就太好了。
唯一万无一失的机制是将代理设置为一个单独的进程,所有出站连接都通过挂接到 OS。这可以在您现有的服务器上完成,也可以作为您的网络网关基础设施的一部分(例如在网络级别)。这类似于 Ethereal 或 Wireshark 等网络嗅探应用程序所做的事情。
否则,您可以尝试修补 nodejs 库中的各种入口点,例如 http.get()
和 http.request()
(以及 https 对应项)以拦截第 3 方库可以使用的各种方式nodejs 库从我们的应用程序建立出站连接(这就是 Nock 所做的)。这并非完全万无一失,因为第三方库可以使用他们自己的本机代码模块绕过 built-in nodejs 库来进行自己的网络,但这是第三方代码发出出站 http 请求的常用方式。
此 http 拦截器也不会涵盖其他类型的 TCP 或 UDP 连接,除非您也尝试通过它们的库接口拦截它们。
您可以查看这个相当低级别的库 node-request-interceptor 以开始进行 http 拦截。