C# HttpClient 是否支持socks4/5 代理?

2024-03-20

我可以使用以下代码设置http代理:

public class CustomFlurlHttpClient : DefaultHttpClientFactory {
    public override HttpClient CreateClient(Url url, HttpMessageHandler m) {
        return base.CreateClient(url, CreateProxyHttpClientHandler("http://192.168.0.103:9090"));
    }

    private HttpClientHandler CreateProxyHttpClientHandler(string proxyUrl, string user = "", string passw = "") {
        NetworkCredential proxyCreds = null;
        var proxyUri = new Uri(proxyUrl);
        proxyCreds = new NetworkCredential (user, passw);
        var proxy = new WebProxy (proxyUri, false) {
            UseDefaultCredentials = false,
            Credentials = proxyCreds
        };
        var clientHandler = new HttpClientHandler {
            UseProxy = true,
            Proxy = proxy,
            PreAuthenticate = true,
            UseDefaultCredentials = false
        };
        if (user != "" && passw != "") {
            clientHandler.Credentials = new NetworkCredential (user, passw);
        }
        return clientHandler;
    }
}
class MainClass {
    public static void Main (string[] args) {
        run ();
        Console.ReadKey ();
    }

    async static void run() {
        using(FlurlClient client = new FlurlClient(c => { c.HttpClientFactory = new CustomFlurlHttpClient();})) {
            var result = await client.WithUrl("https://www.google.com").GetStringAsync();
            Console.WriteLine(result);
        };
    }
}

但不是袜子代理。有什么想法如何去做吗?或者任何其他(未弃用)支持异步/等待语法的其余客户端?


在 .NET 6 中,您可以轻松地做到这一点我在这里回答了 https://stackoverflow.com/a/72343562/673187

但这里有一个快速答案:

var proxy = new WebProxy
{
    Address = new Uri("socks5://localhost:8080")
};
//proxy.Credentials = new NetworkCredential(); //Used to set Proxy logins. 
var handler = new HttpClientHandler
{
    Proxy = proxy
};
var httpClient = new HttpClient(handler);

或配置一个命名的HttpClient将使用创建IHttpClientFactory:

Services.AddHttpClient("WithProxy")
    .ConfigurePrimaryHttpMessageHandler(() =>
    {
        var proxy = new WebProxy
        {
            Address = new Uri("socks5://localhost:8080")
        };
        return new HttpClientHandler
        {
                    Proxy = proxy
         };
    });

当你注射时IHttpClientFactory object:

httpClient = httpClientFactory.CreateClient("WithProxy");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# HttpClient 是否支持socks4/5 代理? 的相关文章

随机推荐