C# HttpClient tor socks4/5 代理?

标签 c# proxy dotnet-httpclient socks flurl

我可以使用以下代码设置 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);
        };
    }
}

但不是 socks 代理。任何想法如何做到这一点?或者支持异步/等待语法的任何其他(未弃用)休息客户端?

最佳答案

可能的解决方案是使用 Extreme.Net包,提供 socks 代理处理程序。例如,在上面的代码中,我们需要替换 CreateClient方法:

        public override HttpClient CreateClient(Url url, HttpMessageHandler m)
    {
        var socksProxy = new Socks5ProxyClient("127.0.0.1", 9150);
        var handler = new ProxyHandler(socksProxy);
        return base.CreateClient(url, handler);
    }

它有效!

关于C# HttpClient tor socks4/5 代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43293365/

相关文章:

c# - WCF + EF 4.1 预加载和序列化问题

proxy - golang反向代理不工作

c# - 为什么异步方法在这里只执行一次 HTTP 请求?

c# - 为什么我们在对象模型项目中需要 GetHashCode() 函数?

c# - 在涉及SslStream.AuthenticateAsClient()的客户端证书期间设置“Windows安全性”对话框所有者

ruby-on-rails-3 - 如何使用 Charles Proxy 从 Rails 应用程序捕获 rest-client 请求?

python - 无法使用 python 连接到 *.onion 站点(<urlopen 错误 [Errno 11001] getaddrinfo 失败>)

HttpClient - 大型上传的两次超时

.net - 为什么HttpClient.PostAsync和PutAsync会处理内容?

c# - 将 C# 对象列表转换为 JavaScript 对象数组