簡體   English   中英

如何使用HttpClient從特定IP地址發送請求? C#

[英]How to use HttpClient to send a Request from a specific IP address? C#

我在服務器上有多個IP,並且希望選擇使用HttpClient類從API獲取/發布數據時要使用的IP中的哪一個。 (或者甚至要同時發送請求,但要使用2個IP,而不僅僅是一個)

我已經看到了一些使用HttpWebRequest的示例( 在這里 ),該示例利用了委托,但是我想繼續使用HttpClient實現。

[這將是駭客代碼,因為沒有訪問ServicePoint的方法/屬性]

您可以使用反射來訪問下面的基礎ServicePoint (由於沒有公共/私有字段/屬性可以訪問此值,因此我將鈎住startRequest委托)

HttpClientHandler SetServicePointOptions(HttpClientHandler handler)
{
    var field = handler.GetType().GetField("_startRequest", BindingFlags.NonPublic| BindingFlags.Instance); // Fieldname has a _ due to being private
    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是您在問題中鏈接的一個。 根據需要修改它。 現在您可以使用這種方法

HttpClientHandler handler = SetServicePointOptions(new HttpClientHandler());
HttpClient client = new HttpClient(handler);
var str = await client.GetStringAsync("https://google.com");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM