У меня есть проект, который должен получать 100 страниц данных с сайта каждый день. Я использую платный прокси с данными для входа и жду 5 секунд между запросами, поэтому я не забиваю их сайт и не передаю реферер, пользовательский агент, и это простой запрос GET.
Однако я пытался сделайте небольшой C# консольный скрипт для тестирования различных способов добавления прокси, например, с учетными данными или без них, и получите рабочий IP-адрес: Порт из Интернета> http://www.freeproxylists.net/, чтобы проверить его, как мои собственные данные в этом тесте не сработало. Я не понимаю, почему этот тестовый сценарий не работает, когда мой основной проект.
Я все равно получаю доступ к старому сайту, которым владею, поэтому я не блокирую свой собственный домашний IP-адрес, поскольку я могу получить к нему доступ Интернет (или любую другую страницу или сайт) в браузере легко.
Без использования прокси-сервера я просто получаю 30-секундное ожидание (время ожидания), затем «Ошибка тайм-аута», с прокси-сервером я получаю НЕТ ждать вообще (бесплатный прокси ИЛИ тот, который у меня есть с учетными данными) перед "Ошибка тайм-аута" - так что независимо от того, использую ли я прокси или нет, он не может вернуть ответ.
Я, вероятно, просто сплю, но хотел бы чтобы знать, что я делаю неправильно, поскольку я просто скопировал свой метод MakeHTTPGetRequest из класса Scraper своих основных проектов и просто удалил все операторы case в try / catch, чтобы проверить наличие ошибок Connection / Timeout / 404 / Service / Server и т. д. c и поместите его в один простой метод Main здесь ...
public static void Main(string[] args)
{
string url = "https://www.strictly-software.com"; // a site I own
//int port = ????; // working in main project crawler
int port = 3128; // from a list of working free proxies
string proxyUser = "????"; // working in main project crawler
string proxyPassword = "????"; // working in main project crawler
string proxyIP = "167.99.230.151"; // from a list of working proxies
ShowDebug("Make a request to: " + url + " with proxy:" + proxyIP + ":" + port.ToString());
// user basic IP and Port proxy with no login
WebProxy proxy = new WebProxy(proxyIP, port);
/*
// use default port, username and password to login
// get same error with correct personal proxy and login but not
// in main project
WebProxy proxy = new WebProxy(proxyIP, port)
{
Credentials = new NetworkCredential(proxyUser, proxyPassword)
};
*/
ShowDebug("Use Proxy: " + proxy.Address.ToString());
HttpWebRequest client = (HttpWebRequest)WebRequest.Create(url);
client.Referer = "https://www.strictly-software.com";
client.Method = "GET";
client.ContentLength = 0;
client.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";client.Proxy = proxy;
client.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0";
client.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
client.Headers.Add("Accept-Encoding", "gzip,deflate");
client.KeepAlive = true;
client.Timeout = 30;
ShowDebug("make request with " + client.UserAgent.ToString());
try
{
// tried adding this to see if it would help but didn't
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
// get the response
HttpWebResponse response = (HttpWebResponse)client.GetResponse();
ShowDebug("response.ContentEncoding = " + response.ContentEncoding.ToString());
ShowDebug("response.ContentType = " + response.ContentType.ToString());
ShowDebug("Status Desc: " + response.StatusDescription.ToString());
ShowDebug("HTTP Status Code: " + response.StatusCode.ToString());
ShowDebug("Now get the full response back");
// old method not working with £ signs
StreamReader ResponseStream = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string ResponseContent = ResponseStream.ReadToEnd().Trim();
ShowDebug("content from response == " + Environment.NewLine + ResponseContent);
ResponseStream.Close();
response.Close();
}
catch (WebException ex)
{
ShowDebug("An error occurred");
ShowDebug("WebException " + ex.Message.ToString());
ShowDebug(ex.Status.ToString());
}
catch(Exception ex)
{
ShowDebug("An error occurred");
ShowDebug("Exception " + ex.Message.ToString());
}
finally
{
ShowDebug("At the end");
}
}
Сообщения об ошибках из консоли (ShowDebug - это просто оболочка для сообщения time +) ...
02/08/2020 00:00:00: Make a request to: https://www.strictly-software.com with proxy:167.99.230.151:3128
02/08/2020 00:00:00: Use Proxy: http://167.99.230.151:3128/
02/08/2020 00:00:00: make request with Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0
02/08/2020 00:00:00: An error occurred
02/08/2020 00:00:00: WebException The operation has timed out
02/08/2020 00:00:00: Timeout
02/08/2020 00:00:00: At the end
Я а Я уверен, что это просто то, что я пропустил, но я знаю, что этот код был скопирован из моего основного проекта, который в настоящее время просматривает сотни страниц с тем же кодом и использует прокси с моими учетными данными, которые работают, поскольку я получаю данные обратно в момент из основного кода проекта.
Я могу пропинговать IP-адрес прокси, но переход к нему в браузере возвращает ошибку подключения, это несмотря на то, что мой большой проект использует тот же прокси для передачи тонны страниц и возвращать HTML всю ночь ...
Я просто хотел обновить свой основной проект, добавив новые методы для передачи пользовательских прокси, или не использовать прокси для 1-й попытки, но если это не удастся затем используйте один для последней попытки или используйте прокси по умолчанию: порт et c.