2

同じ API を何度も呼び出す必要がありますが、特定のパラメーターに基づいて異なる IP を使用しています。

この SO の質問にコードを実装しました: how to change originating IP in HttpWebRequest

これは、呼び出している API に単一の IP を指定する必要があるときにうまく機能しましたが、要件に基づいて複数の IP から使用する必要があり、この方法は機能しなくなったようです。API URL はキャッシュされているようで、その後の呼び出しでは、呼び出しごとに設定したい特定の IP ではなく、その IP が使用されます。

各リクエストの送信元 IP を非常に具体的に選択できる方法が必要です。

追加:

アプリケーションを 2 つの別個のアプリに分割し、それぞれが独自のソース IP を使用する場合、これは強制的に動作させるためのブルート フォース アプローチになりますか? つまり、キャッシングはプロセスごとにのみ実行されますか? (これはそうだと思います)。

4

2 に答える 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。デフォルトのグループは null です。

var hr = (HttpWebRequest)WebRequest.Create("http://google.com");
hr.ServicePoint.CloseConnectionGroup(null);
hr.GetResponse();
于 2013-08-12T19:43:24.363 に答える
0

基礎となるライブラリを熟考せずに試すことができる簡単な解決策を次に示します。

ターゲット URL の最後にランダムなジャンクを配置します。

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

GUID、乱数、ナノタイムなどを生成できます。このアプローチは、応答のキャッシュを防ぐのに最適です。この場合もうまく機能するはずです。これでうまくいくと思いますか?API がその最後のパラメータを無視すると仮定すると...

さらに良いのは、乱数の代わりに、ソース IP のハッシュを追加して、観察しているキャッシュ動作を実際に利用することです。

于 2013-08-12T18:43:56.070 に答える