1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

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

Тема в разделе "Задачи", создана пользователем Интеллект, 10 июн 2024.

  1. Интеллект

    Интеллект A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 ноя 2016
    Сообщения:
    8
    Симпатии:
    0
    Столкнулся с кейсом, что если запрашиваемый 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
    И уходит в цикл.

    Очень прошу поправить это, а то, вроде, как можно парсить сайты успешно причем, но получается, что не во всех вариантах.
     
  2. Интеллект

    Интеллект A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 ноя 2016
    Сообщения:
    8
    Симпатии:
    0
    Вот как выглядит лог и результат. То есть A-parser видит 301 редирект, но несмотря на Follow common redirects его все равно не делает возвращая виде результата.
     

    Вложения:

  3. shralex

    shralex A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    3 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    Доброго времени.
    А вы пробовали ставить проверку на check content?
     
  4. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    4.429
    Симпатии:
    2.123
    По-умолчанию в Net::HTTP используется HTTP/1.1. Указанный сайт при использовании этого протокола уходит в бесконечный редирект, это можно увидеть на скриншоте:
    [​IMG]

    Но, если использовать HTTP/2, то сайт отрабатывает корректно:
    [​IMG]
     
  5. Интеллект

    Интеллект A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 ноя 2016
    Сообщения:
    8
    Симпатии:
    0
    Да, я знаю, что при HTTP/2 все корректно, но я делаю с помощью а-парсера универсальный инструмент, хочу чтобы он не задумываясь брал по любому протоколу. Если я принудительно поставлю HTTP/2, то не смогу взять урл http://businesspravo.ru/Docum/DocumShow_DocumID_6521.html будет:
    "reason":"HTTP/2 Read Headers: Protocol error","data":"","code":597

    Почему бы вам не сделать, что в случае такой ошибки понижать протокол и повторять запрос. Да, я могу это сам сделать, но мне это на порядок ресурсозатратнее, так как я хочу отправлять далеко не один урл, а целую пачку, выбирать из них те, что не прошли и повторять новым пакетом. Да, могу, но вдруг вам это сделать проще? Очень хотелось бы просто отправить и получить по api.
     
  6. Интеллект

    Интеллект A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 ноя 2016
    Сообщения:
    8
    Симпатии:
    0
    Главный вопрос, вы сможете это сделать (повтор с понижением протокола при ошибке) в относительно ближайшее время или мне самому корячется с репитом?
     
  7. Support

    Support Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    16 мар 2012
    Сообщения:
    4.429
    Симпатии:
    2.123
    Проверим возможность реализации и ответим позже
     
  8. Интеллект

    Интеллект A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    28 ноя 2016
    Сообщения:
    8
    Симпатии:
    0
    Спасибо! Будет очень хорошо, если вы это сделаете на своем уровне, у вас же повторы есть, добавить условие, что если http2 и код 597 и число репитов больше 1, отключаем http2 и пробуем через http1.1. Мне просто это гораздо сложнее сделать. Только ответьте, пожалуйста, до конца недели, ждать или делать самому? У меня дедлайн.
     

Поделиться этой страницей