C#HttpClient tor socks4/5代理?
我可以使用以下代码设置http代理:C#HttpClient tor socks4/5代理?,c#,proxy,dotnet-httpclient,socks,flurl,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:9
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);
};
}
}
但不是袜子。有什么办法吗?或者任何其他(未弃用)支持异步/等待语法的rest客户端?可能的解决方案是使用提供socks代理处理程序的
Extreme.Net
包。例如,根据上面的代码,我们需要将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);
}
而且它有效 一个稍好的选择是在自定义工厂中重写
CreateMessageHandler
而不是CreateClient
:
public class CustomFlurlHttpClient : DefaultHttpClientFactory
{
public override HttpMessageHandler CreateMessageHandler() {
var socksProxy = new Socks5ProxyClient("127.0.0.1", 9150);
return new ProxyHandler(socksProxy);
}
}
通常,您可以使用HttpClient做任何事情,也可以使用Flurl。不幸的是,我没有找到任何例子,我个人对袜子也不是很熟悉。也许将此重新定义为一个HttpClient问题,有人会插话进来。很好!这看起来确实可行,但有可能只覆盖MessageHandler的创建,让默认工厂创建HttpClient,我将在一个新的答案中演示。Extreme.Net被弃用了吗?根据nuget–是的