我需要多次调用相同的API,但基于某些参数使用不同的IP。
我在这个SO问题中实现了代码:how to change originating IP in HttpWebRequest
当我需要为我正在调用的API指定单个IP时,这很有效,但现在我需要根据我的要求从几个ips中使用,并且此方法似乎不再起作用。 api url似乎被缓存,后续调用将使用该IP,而不是我希望在每次调用时设置的特定IP。
我需要一种方法,让我非常具体地为每个请求选择源IP。
添加:
如果我将我的应用程序拆分为两个独立的应用程序,每个应用程序都使用自己的源ip,那么这是一种强制它运行的强力方法吗?换句话说,每个进程只执行缓存吗? (我认为是这样)。
答案 0 :(得分: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();
答案 1 :(得分:0)
这是一个快速的解决方案,您可以尝试而不反思底层库:
在目标网址的末尾添加一些随机垃圾,例如
http://api.address.com/restful/get?param1=a¶m2=b的&安培;垃圾= 13929348398 强>
你可以生成一个guid,随机数,纳米级等。这种方法非常适合防止响应的缓存 - 在这种情况下也应该很好。你觉得这对你有用吗?假设API忽略了最后一个参数...
更好的是,您可以附加源IP的哈希值,而不是随机数,以实际利用您观察到的缓存行为。