- Ⅰ. はじめに
- Ⅱ. やり方(.NET6以上の場合)
- Ⅲ. やり方(HttpToSocks5Proxyを利用する方法)
- Ⅳ. やり方(DotNet4.SocksProxyを利用する方法)
- Ⅴ. やり方(SocksSharpを利用する方法)
- 参考
Ⅰ. はじめに
タイトルの通り「C#でHttpClientにSOCKS プロキシを利用する方法」です。
各ライブラリの違いは次のとおりです。
# | ライブラリ名 | メモ |
1 | なし | .NET 6以上 |
2 | HttpToSocks5Proxy | SOCKS5のみ |
3 | DotNet4.SocksProxy | SOCKS4/5 に対応 |
4 | SocksSharp | SOCKS4/4a/5 に対応。バグが多い |
Ⅱ. やり方(.NET6以上の場合)
1. サンプルプログラム
// .NET 6以上必須 // .NET6以上でSocks4, 4a, 5がサポートされた // https://github.com/dotnet/runtime/pull/48883 static async Task Main() { var handler = new HttpClientHandler { // 認証なし Proxy = new WebProxy(new Uri("socks5://127.0.0.1:9050")) // 認証あり // Proxy = new WebProxy(new Uri("socks5://127.0.0.1:9050"), true, null, new NetworkCredential("user", "pass")) }; var httpClient = new HttpClient(handler); var str = await httpClient.GetStringAsync("https://api.ipify.org/").ConfigureAwait(false); Console.WriteLine(str); }
2. 実行結果
省略
Ⅲ. やり方(HttpToSocks5Proxyを利用する方法)
HttpToSocks5Proxy を利用します。
HttpToSocks5Proxy はSOCKS5のみに対応しています。(2018/09/17時点)
1. NuGetから HttpToSocks5Proxy をインストールする
Install-Package HttpToSocks5Proxy
2. サンプルプログラム
var proxy = new HttpToSocks5Proxy("46.x.x.x", 1080); var handler = new HttpClientHandler(); handler.Proxy = proxy; handler.UseProxy = true; var client = new HttpClient(handler); var str = await client.GetStringAsync("https://api.ipify.org"); Console.WriteLine(str);
3. 実行結果
Ⅳ. やり方(DotNet4.SocksProxyを利用する方法)
DotNet4.SocksProxy を利用します。
DotNet4.SocksProxy は SOCKS4/5 に対応しています。(2018/02/21時点)
1. NuGetから DotNet4.SocksProxy をインストールする
Install-Package DotNet4.SocksProxy
2. サンプルプログラム
using com.LandonKey.SocksWebProxy; using com.LandonKey.SocksWebProxy.Proxy; using System; using System.Net; using System.Net.Http; using System.Net.Sockets; namespace Test { class Program { private static int GetNextFreePort() { var listener = new TcpListener(IPAddress.Loopback, 0); listener.Start(); var port = ((IPEndPoint)listener.LocalEndpoint).Port; listener.Stop(); return port; } static void Main(string[] args) { var proxy = new SocksWebProxy(new ProxyConfig( IPAddress.Parse("127.0.0.1"), GetNextFreePort(), IPAddress.Parse("127.0.0.1"), 9050, ProxyConfig.SocksVersion.Five)); var handler = new HttpClientHandler(); handler.Proxy = proxy; var client = new HttpClient(handler); Console.WriteLine(client.GetStringAsync("https://api.ipify.org").Result); } } }
3. 実行結果
Ⅴ. やり方(SocksSharpを利用する方法)
SocksSharp を利用します。
SocksSharp は SOCKS4/4a/5 に対応しています。(2018/02/21時点)
POSTが正常に出来ない、Streamに対応していない等バグが多いです。(2018/02/21時点)
1. NuGetから SocksSharp をインストールする
Install-Package SocksSharp
2. サンプルプログラム
using SocksSharp; using SocksSharp.Proxy; using System; using System.Net.Http; namespace HttpClientTest { class Program { static void Main(string[] args) { var settings = new ProxySettings() { Host = "127.0.0.1", Port = 1080 }; var handler = new ProxyClientHandler<Socks5>(settings); var client = new HttpClient(handler); Console.WriteLine(client.GetStringAsync("https://api.ipify.org").Result); } } }
3. 実行結果