更改原始 IP - 规避连接缓存

问题描述 投票:0回答:2

我需要多次调用相同的API,但根据某些参数使用不同的IP。

我已经实现了这个SO问题中的代码:如何更改HttpWebRequest中的原始IP

当我需要为我调用的 API 指定单个 IP 时,这种方法效果很好,但现在我需要根据我的要求使用多个 IP,并且这种方法似乎不再有效。 API URL 似乎已被缓存,后续调用将使用该 IP,而不是我希望在每次调用时设置的特定 IP。

我需要一种方法,让我可以非常具体地为每个请求选择源 IP。

添加:

如果我将我的应用程序分成两个单独的应用程序,每个应用程序都使用自己的源 IP,这是否是一种强制其工作的强力方法?换句话说,缓存是否仅针对每个进程执行? (我认为是这样)。

c# .net web-services webrequest
2个回答
1
投票

使用

HttpWebRequest.ConnectionGroupName
您应该能够绕过 ServicePoint 连接重用。

var hr = (HttpWebRequest)WebRequest.Create("http://google.com?");
hr.ConnectionGroupName = hr.RequestUri.ToString(); //Different connection pool per url. Might be better to make this random.
hr.GetResponse();

或者,您可以使用

ServicePoint.CloseConnectionGroup
强制关闭该组。默认组为空。

var hr = (HttpWebRequest)WebRequest.Create("http://google.com");
hr.ServicePoint.CloseConnectionGroup(null);
hr.GetResponse();

0
投票

这是一个快速解决方案,您可以尝试而无需考虑底层库:

在目标 URL 末尾添加一些随机垃圾,例如

http://api.address.com/restful/get?param1=a¶m2=b&junk=13929348398

您可以生成 guid、随机数、纳米时间等。这种方法非常适合防止缓存响应——在这种情况下也应该能很好地工作。 您认为这对您有用吗? 假设 API 忽略最后一个参数...

更好的是,您可以附加源 IP 的哈希值来代替随机数,以实际利用您观察到的缓存行为。

© www.soinside.com 2019 - 2024. All rights reserved.