Использование прокси на 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 можно найти здесь.