Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Пропал парсинг web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 82
Вот это всегда работало:

 Dim strAdress As String = "https://prozorro.gov.ua/tender/search?edrpou=20915546"
        Dim web As New WebClient
        web.Encoding = System.Text.Encoding.UTF8
        Dim strQlltext As String = web.DownloadString(strAdress)
        RichTextBox1.Text = strQlltext


А вот сегодня следующий фокус, вернее ошибка "Базовое соединение закрыто: Непредвиденная ошибка при передаче."
Как лечить?
2 авг 18, 15:10    [21625024]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3404
Bujhm_C,

проверить дату и время на компьютере, попробовать отключить проверку сертификата
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
2 авг 18, 15:24    [21625105]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 82
Roman Mejtes
Bujhm_C,

проверить дату и время на компьютере, попробовать отключить проверку сертификата
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;


Время проверил. Сертификат отключил! Не помогло. Что за фокус?
 Try
            Dim strAdress As String = "https://prozorro.gov.ua/tender/search?edrpou=20915546"
            Dim web As New WebClient
            web.Encoding = System.Text.Encoding.UTF8
            Dim strQlltext As String = web.DownloadString(strAdress)
        
             System.Net.ServicePointManager.ServerCertificateValidationCallback = _
            Function(se As Object, _
            cert As System.Security.Cryptography.X509Certificates.X509Certificate, _
            chain As System.Security.Cryptography.X509Certificates.X509Chain, _
            sslerror As System.Net.Security.SslPolicyErrors) True
            RichTextBox1.Text = strQlltext
        
            ' GBA(strQlltext, "<li class=""marked"">", "</li>", ListBox1)
        Catch ex As Exception
            MsgBox(ex.ToString)

        End Try
2 авг 18, 15:35    [21625167]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Bujhm_C,

а в браузере запрос выполняется? ("я не робот" не появляется?)

https://prozorro.gov.ua/robots.txt
User-agent: *
Disallow: /*?*
Disallow: /form/
Disallow: /search/

Запрос формально попадает под запрет (Disallow: /*?*). Т.е., они не хотят чтобы эти станицы парсили, как минимум они об этом заявили... Чаще всего, конечно, такие декларации остаются лишь декларациями, но всяко бывает...
2 авг 18, 15:40    [21625191]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 82
LR
Bujhm_C,

а в браузере запрос выполняется? ("я не робот" не появляется?)

https://prozorro.gov.ua/robots.txt
User-agent: *
Disallow: /*?*
Disallow: /form/
Disallow: /search/

Запрос формально попадает под запрет (Disallow: /*?*). Т.е., они не хотят чтобы эти станицы парсили, как минимум они об этом заявили... Чаще всего, конечно, такие декларации остаются лишь декларациями, но всяко бывает...


В браузере выполняется на ура. Затык в чем то другом!
2 авг 18, 15:52    [21625251]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Изопропил
Member

Откуда:
Сообщений: 31186
LR
Запрос формально попадает под запрет (Disallow: /*?*). Т.е., они не хотят чтобы эти станицы парсили, как минимум они об этом заявили...

неправда, просто рекомендацмя не индексировать
2 авг 18, 16:09    [21625349]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Изопропил
Member

Откуда:
Сообщений: 31186
Bujhm_C
В браузере выполняется на ура. Затык в чем то другом!

заголовки в запросе отдай такие, как у броузера
2 авг 18, 16:11    [21625358]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Bujhm_C
В браузере выполняется на ура. Затык в чем то другом!

Ну так браузер же не робот (в отличие от WebClient). С другого айпишника затыка же нет (у меня WebClient выполняет на ура). Поэтому антибота исключать рано...

Попробуйте еще так
using (WebClient wc = new WebClient()) {
     //wc.Headers.Add("User-Agent", "DotNET WebClient");
     //htmlsrc = wc.DownloadString(pageuri);
     var rawdata = wc.DownloadData(pageuri);
     htmlsrc = Encoding.UTF8.GetString(rawdata);
}
2 авг 18, 16:16    [21625377]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 82
Изопропил
Bujhm_C
В браузере выполняется на ура. Затык в чем то другом!

заголовки в запросе отдай такие, как у броузера




[url=]"https://prozorro.gov.ua/tender/search?edrpou=20915546"[/url] -это выполняется в браузере, а это не идет, ошибка

   Dim strQlltext As String = web.DownloadString("https://prozorro.gov.ua/tender/search?edrpou=20915546")
2 авг 18, 16:20    [21625394]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Изопропил
LR
Запрос формально попадает под запрет (Disallow: /*?*). Т.е., они не хотят чтобы эти станицы парсили, как минимум они об этом заявили...

неправда, просто рекомендацмя не индексировать

Да, robots.txt изначально - рекомендации для поисковиков. Но, как я понял, в последнее время используется и как "антибот-декларация". К тому же, все чаще встречаются мнения типа "вместо того чтобы "запрещать" индексацию проще сделать так, чтобы робот просто не смог до нее добраться".
2 авг 18, 16:38    [21625486]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 82
LR
Bujhm_C
В браузере выполняется на ура. Затык в чем то другом!

Ну так браузер же не робот (в отличие от WebClient). С другого айпишника затыка же нет (у меня WebClient выполняет на ура). Поэтому антибота исключать рано...

Попробуйте еще так
using (WebClient wc = new WebClient()) {
     //wc.Headers.Add("User-Agent", "DotNET WebClient");
     //htmlsrc = wc.DownloadString(pageuri);
     var rawdata = wc.DownloadData(pageuri);
     htmlsrc = Encoding.UTF8.GetString(rawdata);
}


То же не идет, что никак не обойти? Я боле года выполнял процедуру, никогда сбоев не было. А что сегодня за катаклизм?
2 авг 18, 16:39    [21625492]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Bujhm_C,

тогда, как Изопропил сказал - нажимаете в браузере F12 и добавляете WebClient аналогичные заголовки запроса

wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0");
...и т.д.
2 авг 18, 16:49    [21625560]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Изопропил,

https://en.wikipedia.org/wiki/Internet_bot
Servers may choose to outline rules on the behaviour of internet bots by implementing a robots.txt file: this file is simply text stating the rules governing a bot's behaviour on that server. Any bot interacting with (or 'spidering') any server that does not follow these rules should, in theory, be denied access to, or removed from, the affected website.

https://en.wikipedia.org/wiki/Web_scraping
Bots sometimes declare who they are (using user agent strings) and can be blocked on that basis using robots.txt; 'googlebot' is an example. Other bots make no distinction between themselves and a human using a browser.
...
Websites can declare if crawling is allowed or not in the robots.txt file and allow partial access, limit the crawl rate, specify the optimal time to crawl and more.
2 авг 18, 17:58    [21625820]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Bujhm_C,

чтобы откинуть версию с антиботом, попробуйте незапрещенную страничку
var str = wc.DownloadString("https://prozorro.gov.ua/");

хотя, если айпишник попал в черный список, могут рубить и на корню...
2 авг 18, 18:17    [21625880]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Изопропил
Member

Откуда:
Сообщений: 31186
просто tls нужной версии ему нужен

добавить
System.Net.ServicePointManager.SecurityProtocol =  System.Net.SecurityProtocolType.Tls12;
2 авг 18, 18:22    [21625895]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Изопропил,

Да, похоже это оно. С Tls11 тоже проходит, а вот с Tls получается такая же ошибка.
2 авг 18, 18:35    [21625936]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 82
LR
Bujhm_C,

чтобы откинуть версию с антиботом, попробуйте незапрещенную страничку
var str = wc.DownloadString("https://prozorro.gov.ua/");
хотя, если айпишник попал в черный список, могут рубить и на корню...


1. попробовал не запрещенную страничку
var str = wc.DownloadString("https://prozorro.gov.ua/"); - то же неудача!
2."айпишник попал в черный список"- и что, без вариантов?
3. System.Net.SecurityProtocolType.Tls12;- не проходит, только System.Net.SecurityProtocolType.Tls
2 авг 18, 19:30    [21626094]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Bujhm_C
3. System.Net.SecurityProtocolType.Tls12;- не проходит, только System.Net.SecurityProtocolType.Tls

Ну вот в этом, вероятней всего, и причина. Нужен хотя бы System.Net.SecurityProtocolType.Tls11.
А что значит "не проходит"? Ошибка при присваивании?
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
(т.е. ServicePointManager.SecurityProtocol==SecurityProtocolType.Tls, и изменить это нельзя?)
2 авг 18, 19:52    [21626153]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Bujhm_C,

Погуглил, похоже .NET 4.0 не поддерживает Tls11/Tls12, одно решение видел - переводить проект на .NET 4.5... Есть ли другие решения, х.з.
2 авг 18, 20:12    [21626194]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 82
LR
Bujhm_C
3. System.Net.SecurityProtocolType.Tls12;- не проходит, только System.Net.SecurityProtocolType.Tls

Ну вот в этом, вероятней всего, и причина. Нужен хотя бы System.Net.SecurityProtocolType.Tls11.
А что значит "не проходит"? Ошибка при присваивании?
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
(т.е. ServicePointManager.SecurityProtocol==SecurityProtocolType.Tls, и изменить это нельзя?)


Не присваивается! После точки только SecurityProtocolType.Tls или Ssl3!
2 авг 18, 20:13    [21626200]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Bujhm_C
Не присваивается! После точки только SecurityProtocolType.Tls или Ssl3!

Ну, значит это .NET 4.0. Есть возможность перевести проект на .NET 4.5?
2 авг 18, 20:15    [21626203]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 82
LR,

Сейчас скачаю, попробую, какова вероятность, что поможет?
2 авг 18, 20:19    [21626211]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2372
Bujhm_C,

пусть будет 95%)) но лучше спросить у Изопропила, мож есть более простое решение...
2 авг 18, 20:23    [21626217]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Изопропил
Member

Откуда:
Сообщений: 31186
LR
мож есть более простое решение...

стартовать curl в отдельном процессе :]


хотя это вряд ли будет проще - только при невозможности обновить фреймворк
2 авг 18, 21:01    [21626298]     Ответить | Цитировать Сообщить модератору
 Re: Пропал парсинг web страницы  [new]
Bujhm_C
Member

Откуда:
Сообщений: 82
Помогло
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
!!!
Но есть одно но... Проект собран на 10 Студии а там Framework 4. Пришлось опробовать на VS 2015 с Framework 4.5.
Вот, если бы рыбку съесть.. на Framework 4?
2 авг 18, 21:11    [21626309]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / WinForms, .Net Framework Ответить