如何在HttpWebRequest中更改原始IP

我在已分配5个IP的服务器上运行此应用程序。 我使用HttpWebRequest从网站获取一些数据。 但是当我建立连接时,我能够指定连接的5个IP中的哪一个。 HttpWebRequest是否支持此function? 如果不能,我可以从中inheritance一个类来改变它的行为吗? 我在这里需要这样的想法。

我的代码现在是这样的:

System.Net.WebRequest request = System.Net.WebRequest.Create(link); ((HttpWebRequest)request).Referer = "http://application.com"; using (System.Net.WebResponse response = request.GetResponse()) { StreamReader sr = new StreamReader(response.GetResponseStream()); return sr.ReadToEnd(); } 

根据这个 ,没有。 您可能需要使用套接字,我知道您可以选择本地IP。

编辑:实际上,它似乎有可能。 HttpWebRequest有一个ServicePoint属性,后者又有BindIPEndPointDelegate ,这可能就是你要找的东西。

给我一点时间,我要举起一个例子……

 HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://stackoverflow.com"); req.ServicePoint.BindIPEndPointDelegate = delegate( ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount) { if (remoteEndPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) { return new IPEndPoint(IPAddress.IPv6Any, 0); } else { return new IPEndPoint(IPAddress.Any, 0); } }; Console.WriteLine(req.GetResponse().ResponseUri); 

基本上,代表必须返回IPEndPoint。 你可以选择你想要的任何东西,但是如果它不能绑定它,它将再次调用委托,最多为int.MAX_VALUE次。 这就是为什么我包含代码来处理IPv6,因为IPAddress.Any是IPv4。

如果你不关心IPv6,你可以摆脱它。 另外,我将实际选择的IPAddress作为练习留给读者:)

试试这个:

 System.Net.WebRequest request = System.Net.WebRequest.Create(link); request.ConnectionGroupName = "MyNameForThisGroup"; ((HttpWebRequest)request).Referer = "http://application.com"; using (System.Net.WebResponse response = request.GetResponse()) { StreamReader sr = new StreamReader(response.GetResponseStream()); return sr.ReadToEnd(); } 

然后尝试将ConnectionGroupName设置为您希望使用的每个源ip的不同内容。

编辑:将此与上面答案中的IP绑定委托结合使用。