Использование прокси на C#

13.10.2017 at 13:51

Часто при парсинге данных можно столкнуться с защитой от парсинга. Чаще всего сервер банит 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 можно найти здесь.