Использование прокси на C#
Часто при парсинге данных можно столкнуться с защитой от парсинга. Чаще всего сервер банит IP адрес с которого идет слишком много запросов. Для обхода такой защиты нужно использовать proxy.
Ранее я уже писал о парсинге сайтов с помощью создания WebRequest. Добавить к нему прокси очень просто:
static void AddProxy(HttpWebRequest request) {
var proxy = new WebProxy(proxyip, proxyport);
request.Proxy = proxy;
}
Некоторые прокси могут требовать авторизации по логину и паролю. Для таких прокси код выглядит так:
static void AddProxy(HttpWebRequest request) {
var proxy = new WebProxy(proxyip, proxyport);
proxy.Credentials = new NetworkCredential("username", "password");
request.Proxy = proxy;
}
Парсинг бесплатных прокси
Доступ к нормальным прокси стоит денег. Иногда можно использовать бесплатные прокси листы — в интернете множество таких сервисов.
Для себя я сделал функцию, которая парсит бесплатные прокси с одного из сервисов
static IEnumerable<WebProxy> ParseProxies(){
var result = new List<WebProxy>();
var lines = LoadPage("http://www.gatherproxy.com/").Split(Environment.NewLine).Select(s => s.Trim()).Where(s => s.StartsWith("gp.insertPrx"));
foreach (var line in lines) {
var parts = line.Split(',').Select(s => s.Trim());
var ipPart = parts.FirstOrDefault(s => s.Contains("PROXY_IP"));
var portPart = parts.FirstOrDefault(s => s.Contains("PROXY_PORT"));
var ip = ipPart.Replace("\"PROXY_IP\":", "").Trim('"');
var port = Convert.ToInt32(portPart.Replace("\"PROXY_PORT\":", "").Trim('"'), 16);
result.Add(new WebProxy(ip, port));
}
return result;
}
Функцию LoadPage можно найти здесь.
