Shifterと一緒に使用する C# / .NET
ShifterのレジデンシャルおよびISP Proxiesをビジネスロジックに手を加えることなく、.NETプロジェクト(HttpClient、RestSharp、Flurl、Selenium、Playwright)に組み込めます。
クイックスタート
インストール
dotnet add package System.Net.Http 基本的な使い方
using System.Net;
using System.Net.Http;
var proxy = new WebProxy("http://p.shifter.io:443") {
Credentials = new NetworkCredential(
"customer-USERNAME-country-us-sid-123ABC",
"PASSWORD"
)
};
var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
using var client = new HttpClient(handler) {
Timeout = TimeSpan.FromSeconds(30)
};
var json = await client.GetStringAsync("https://ipinfo.io/json");
Console.WriteLine(json);
// {"ip": "154.16.xxx.xxx", "city": "New York", "country": "US", ...} 機能
例
スティッキーセッションを使用したHttpClient
標準の.NET HTTPクライアントです。一度設定すれば、IHttpClientFactoryまたはシングルトンを通じてアプリ全体で共有できます。同じレジデンシャルIPが、一致する`sid`を持つすべてのリクエストで再利用されます。
using System.Net;
using System.Net.Http;
static HttpClient ShifterClient(string country, string city, string sid)
{
var proxy = new WebProxy("http://p.shifter.io:443") {
Credentials = new NetworkCredential(
$"customer-USERNAME-country-{country}-city-{city}-sid-{sid}-ttl-300",
"PASSWORD"
)
};
var handler = new HttpClientHandler {
Proxy = proxy,
UseProxy = true,
AutomaticDecompression = DecompressionMethods.All
};
var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };
client.DefaultRequestHeaders.Add("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
return client;
}
var c = ShifterClient("uk", "london", Guid.NewGuid().ToString("N")[..8]);
foreach (var path in new[] { "/login", "/dashboard", "/orders" })
{
var resp = await c.GetAsync($"https://example.co.uk{path}");
Console.WriteLine($"{path} {(int)resp.StatusCode} {(await resp.Content.ReadAsStringAsync()).Length}");
} RestSharp
RestSharpはHttpClientをfluent builder、自動JSONデシリアライゼーション、リトライポリシーでラップします。RestClientOptionsでプロキシを設定してください。
using RestSharp;
using System.Net;
public record Product(int Id, string Name, decimal Price);
var options = new RestClientOptions("https://api.example.de") {
Proxy = new WebProxy("http://p.shifter.io:443") {
Credentials = new NetworkCredential(
"customer-USERNAME-country-de-sid-456DEF",
"PASSWORD"
)
},
Timeout = TimeSpan.FromSeconds(30)
};
var client = new RestClient(options);
var request = new RestRequest("/products");
request.AddHeader("User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36");
var products = await client.GetAsync<List<Product>>(request);
foreach (var p in products!)
Console.WriteLine($"{p.Id} {p.Name} — {p.Price:C}"); Selenium WebDriver (.NET)
JavaScriptがレンダリングされる対象に対し、Shifterを通じて実際のChrome / Edge / Firefoxインスタンスを操作できます。ヘッドレス認証にはShifterのIPホワイトリストと組み合わせてください。
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Proxy = OpenQA.Selenium.Proxy;
var seleniumProxy = new Proxy {
HttpProxy = "p.shifter.io:443",
SslProxy = "p.shifter.io:443"
};
var options = new ChromeOptions { Proxy = seleniumProxy };
options.AddArguments("--headless=new",
"--user-agent=Mozilla/5.0 (Linux) AppleWebKit/537.36");
// For username-password auth in headless mode, pair with Shifter's
// IP whitelist or use selenium-wire — Chrome ignores credentials in
// headless mode without a sidecar extension.
using var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("https://example.com");
var title = driver.Title;
var html = driver.PageSource;
Console.WriteLine($"{title} — {html.Length} bytes"); Playwright for .NET
Microsoft PlaywrightはC#からChromium、Firefox、WebKitを操作します。起動オプションでプロキシを設定してください。認証情報はインラインで記述でき、拡張機能は不要です。
using Microsoft.Playwright;
using var playwright = await Playwright.CreateAsync();
await using var browser = await playwright.Chromium.LaunchAsync(new() {
Proxy = new() {
Server = "http://p.shifter.io:443",
Username = "customer-USERNAME-country-fr-city-paris-sid-789GHI",
Password = "PASSWORD"
}
});
var context = await browser.NewContextAsync(new() {
UserAgent = "Mozilla/5.0 (Windows) AppleWebKit/537.36"
});
var page = await context.NewPageAsync();
await page.GotoAsync("https://example.fr");
var headlines = await page.Locator(".headline").AllTextContentsAsync();
foreach (var h in headlines)
Console.WriteLine(h); よくある質問
Shifter と C# / .NET の併用に関するよくある質問。
`http://p.shifter.io:443`を指すWebProxyを作成し、ShifterのユーザーネームとパスワードをNetworkCredentialに設定してCredentialsに渡します。UseProxy = trueに設定したHttpClientHandlerにそれを渡し、そのハンドラーで新しいHttpClientを作成します。同じクライアントはIHttpClientFactory経由でアプリ全体で安全に共有できます。
RestClientOptionsのProxyプロパティを、NetworkCredentialを持つWebProxyに設定してください。RestSharpは基盤となるHttpClientをラップするため、RestClientが行うすべてのリクエストがShifterを経由します。RestSharp 110+に対応しています。
はい。PlaywrightのBrowserTypeLaunchOptionsのProxyフィールドにServer、Username、Passwordを設定します。同じ設定がChromium、Firefox、WebKitで機能します。拡張機能は不要で、認証情報はインラインで渡されます。
プロキシのユーザー名にセッションIDを追加してください。例:`customer-USERNAME-country-us-sid-123ABC`。同じsidで認証するすべての.NETリクエストは同じレジデンシャルIPを再利用します。`ttl-N`を追加すると、そのIPをN秒まで固定できます。
はい。Program.cs でIHttpClientFactory を通じて名前付きのHttpClient を登録し、そのハンドラーがShifter のWebProxy を使用するよう設定した上で、必要な箇所でIHttpClientFactory.CreateClient("shifter") を注入してください。MVC、Minimal APIs、Blazor で動作します。
NuGetパッケージは不要です。ShifterはプレーンなHTTP / SOCKS5に対応しています。既存のHttpClientを`p.shifter.io:443`に向けるだけです。これによりプロジェクトファイルをスリムに保ち、.NET Framework、.NET Core、.NET 5+で動作します。
でShifterを使い始める C# / .NET
Shifterの2億500万件以上のレジデンシャル・ISPプロキシを5分以内に.NETスタックに追加できます。HttpClient・RestSharp・Selenium・Playwrightに対応しています。