原创

.Net HttpClient如何使用socks5Proxy

这篇文章我们要介绍下,在.Net中的如何让HttpClient的Proxy使用Socks5作为Proxy。

###简要

在.Net中,如果要模拟发送POST/GET数据包,最常用的就是HttpClient。而HttpClient虽然有Proxy,但是只能基于http/https的代理模式。因为网络环境极其复杂,http/https的代理模式已经不再安全,也不适用于复杂的业务场景,有时候我们需要使用Socks5作为代理,就发现好像无法这样,虽然可以通过外部程序干预,比如以网卡的方式设置代理之类的,究其原因还是太过于繁杂。那有没有一种方式能让HttpClient使用Socks5代理呢?或者说将Socks5代理转换成http代理?

HttpToSocks5Proxy

答案显然是有的,国外一个老哥就提供了.Net下Socks5转http代理的方式,HttpToSocks5Proxy

HttpToSocks5Proxy是什么?

This library allows you to connect over Socks5 proxies when using the .NET HttpClient.

当你使用.Net HttpClient 的时候 允许你通过Socks5进行代理连接

It implements the IWebProxy interface and can therefore be used with all libraries that support HTTP/HTTPS proxies.

HttpToSocks5Proxy实现了IWebProxy接口,所以可以与所有支持HTTP/HTTPS代理的库一起使用。

HttpToSocks5Proxy怎么用

用法极其简单 值得注意的是,有些站点使用了不同版本的tls协议,所以需要先在程序执行前跑一遍:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

具体作用参考下百度。 这代码很简答,HttpClient的代理使用proxy即可。内部进行了转换操作。

var proxy = new HttpToSocks5Proxy("127.0.0.1", 1080);
var handler = new HttpClientHandler { Proxy = proxy };
HttpClient httpClient = new HttpClient(handler, true);

var result = await httpClient.SendAsync(
    new HttpRequestMessage(HttpMethod.Get, "https://httpbin.org/ip"));

Console.WriteLine("HTTPS GET: " + await result.Content.ReadAsStringAsync());

我们模拟一个封包:

最近我在研究twitter的api接口,所以也需要这样一个东西。

推特的SDK,如上篇文章中的CoreTweet

下面看代码:

ConnectionOptions conn = new ConnectionOptions();
conn.UseProxy=true;

var proxy = new HttpToSocks5Proxy("127.0.0.1", 1080);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
conn.Proxy=proxy;

session = OAuth.Authorize("consumerKey", "consumerSecret",null,conn);
txtTwitterTokenUri.Text= session.AuthorizeUri.AbsoluteUri;

本文粗浅的介绍了HttpToSocks5Proxy,如有不对的地方,敬请斧正。

温馨提示:
本文最后更新于 2020年08月18日,已超过 893 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我
正文到此结束
该篇文章的评论功能已被站长关闭
本文目录