Улучшение [1.2.2410] Отсутвие конечного редиректа после cloudflare в Net::HTTP

Интеллект

A-Parser Enterprise License
A-Parser Enterprise
Столкнулся с кейсом, что если запрашиваемый url находится за cloudflare и имеет редирект после проверки, то А-парсер не переходит по нему, хотя Follow common redirects включено. Это можно увидеть запросив урл https://a-star.ru/ (именно без www) с не российского ip. Более подробное описание проблемы я давал в ТГ в общении с саппортом. Это касается Engine HTTP (Fast, JavaScript Disabled)

В случае Engine Chrome (Slow, JavaScript Enabled) обход cloudflare не работает, вообще, в логе вижу:
GET(1): https://www.a-star.ru/ - 597 Chrome request error: Timeout by timer
И уходит в цикл.

Очень прошу поправить это, а то, вроде, как можно парсить сайты успешно причем, но получается, что не во всех вариантах.
 
Вот как выглядит лог и результат. То есть A-parser видит 301 редирект, но несмотря на Follow common redirects его все равно не делает возвращая виде результата.
 

Вложения

  • Screenshot_4.png
    Screenshot_4.png
    44,7 КБ · Просмотры: 7
Доброго времени.
А вы пробовали ставить проверку на check content?
 
По-умолчанию в Net::HTTP используется HTTP/1.1. Указанный сайт при использовании этого протокола уходит в бесконечный редирект, это можно увидеть на скриншоте:
renq9_240611093228.png


Но, если использовать HTTP/2, то сайт отрабатывает корректно:
m5ysl_240611093400.png
 
По-умолчанию в Net::HTTP используется HTTP/1.1. Указанный сайт при использовании этого протокола уходит в бесконечный редирект
Да, я знаю, что при HTTP/2 все корректно, но я делаю с помощью а-парсера универсальный инструмент, хочу чтобы он не задумываясь брал по любому протоколу. Если я принудительно поставлю HTTP/2, то не смогу взять урл http://businesspravo.ru/Docum/DocumShow_DocumID_6521.html будет:
"reason":"HTTP/2 Read Headers: Protocol error","data":"","code":597

Почему бы вам не сделать, что в случае такой ошибки понижать протокол и повторять запрос. Да, я могу это сам сделать, но мне это на порядок ресурсозатратнее, так как я хочу отправлять далеко не один урл, а целую пачку, выбирать из них те, что не прошли и повторять новым пакетом. Да, могу, но вдруг вам это сделать проще? Очень хотелось бы просто отправить и получить по api.
 
Главный вопрос, вы сможете это сделать (повтор с понижением протокола при ошибке) в относительно ближайшее время или мне самому корячется с репитом?
 
Проверим возможность реализации и ответим позже
 
Проверим возможность реализации и ответим позже
Спасибо! Будет очень хорошо, если вы это сделаете на своем уровне, у вас же повторы есть, добавить условие, что если http2 и код 597 и число репитов больше 1, отключаем http2 и пробуем через http1.1. Мне просто это гораздо сложнее сделать. Только ответьте, пожалуйста, до конца недели, ждать или делать самому? У меня дедлайн.
 
В Net::HTTP Net::HTTP добавлена опция Try use HTTP/1.1 for Protocol error (по-умолчанию включена).
Данная опция указывает парсеру повторить запрос с HTTP/1.1 если был включен HTTP/2 и получена ошибка протокола.
c7e7r_240925150151.png
 
Назад
Верх