2016-09-25 2 views
0

私はサーバー上に複数のIPを持っており、HttpClientクラスを使用してAPIからデータを取得/ポストするときに使用したいものを選択したいと考えています。 (あるいは同時に要求を送信するが、1つだけ2つのIPを利用していない)HttpClientを使用して特定のIPアドレスからリクエストを送信するにはどうすればよいですか? C#

私はHttpWebRequestのを使用していくつかの例を見てきました(here)デリゲートを利用しますが、私はHttpClientを実装を使用して実行したいと思います。

答えて

1

[のServicePointにアクセスするためのいかなる方法/プロパティが存在しないので、これは、ハックコードなり]

ない公衆がないのであなたが (以下のように、基礎となるのServicePointにアクセスするためにリフレクションを使用することができこの値にアクセスするには、/ privateフィールド/プロパティ、私は開始要求デリゲートをフックします)

HttpClientHandler SetServicePointOptions(HttpClientHandler handler) 
{ 
    var field = handler.GetType().GetField("startRequest", BindingFlags.NonPublic| BindingFlags.Instance); 
    var startRequest = (Action<object>)field.GetValue(handler); 

    Action<object> newStartRequest = obj => 
    { 
     var webReqField = obj.GetType().GetField("webRequest", BindingFlags.NonPublic | BindingFlags.Instance); 
     var webRequest = webReqField.GetValue(obj) as HttpWebRequest; 
     webRequest.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback); 

     startRequest(obj); //call original action 
    }; 

    field.SetValue(handler, newStartRequest); //replace original 'startRequest' with the one above 

    return handler; 
} 

BindIPEndPointCallbackはあなたの質問でlinkedです。必要に応じて変更してください。 この方法を使用できます。

HttpClientHandler handler = SetServicePointOptions(new HttpClientHandler()); 
HttpClient client = new HttpClient(handler); 
var str = await client.GetStringAsync("https://google.com"); 
関連する問題