403 запрещенная ошибка при сканировании веб-сайта с использованием запросов python на Heroku

Я написал скрипт сканера, который отправляет запрос на публикацию на sci-hub.do, и я настроил его на Heroku. Но когда он пытается отправить сообщение или получить запрос, я в основном получаю 403 запрещенное сообщение.

Странно то, что это происходит только тогда, когда этот скрипт работает в облаке Heroku, и когда я запускаю его на своем ПК, все хорошо, и я получаю код состояния 200.

Я пытался использовать сеанс, но это не сработало. Я также проверил robots.txt этого веб-сайта и установил заголовок User-Agent на Twitterbot/1.0, но это все равно не удалось.

Что я делаю не так? Почему это происходит только тогда, когда скрипт работает на Heroku.

Я почти уверен, что веб-сервер определяет мой скрипт как поисковый робот и пытается его заблокировать. Но почему даже после добавления правильного User-agent?


person Sherafati    schedule 27.01.2021    source источник
comment
Это может быть много факторов, в зависимости от рассматриваемого сайта. Например,. такие вещи, как Cloudflare, могут автоматически блокировать определенные запросы, если они выглядят подозрительно (слишком быстро, действуют как бот и т. д.). В частности, я не знаком с sci-hub, но, возможно, у них есть какая-то автоматическая блокировка ботов, которая блокирует серверы / IP-адреса heroku, но не ваше домашнее соединение?   -  person anonymous coward    schedule 27.01.2021
comment
Все это говорит о том, что User Agent определенно не единственная переменная, которая может активировать автоматическую защиту на веб-сайте. Есть много возможных переменных.   -  person anonymous coward    schedule 27.01.2021
comment
Это может быть очень возможно. Но, как я упоминал в комментарии ниже, я спонтанно получаю ответ 200, но после нескольких запросов меня блокируют!   -  person Sherafati    schedule 27.01.2021
comment
Любой данный веб-сервер не обязан отвечать одинаково все время. Меня не удивляет эта закономерность. Это просто очень сложный вопрос, на который можно однозначно ответить, не имея более глубоких знаний о самой конфигурации веб-сервера. Очень трудно узнать что-либо наверняка со стороны.   -  person anonymous coward    schedule 02.02.2021


Ответы (1)


Попробуйте добавить обычный пользовательский агент, например:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36

Возможно, вам нужно будет использовать случайный пользовательский агент для каждого запроса. Затем вы можете установить и использовать https://pypi.org/project/fake-useragent/

person dukkee    schedule 27.01.2021
comment
Я пробовал это. Это иногда работает, но после пары запросов снова меняется на 403! - person Sherafati; 27.01.2021
comment
@Sherafati, тогда я рекомендую вам установить и попробовать pypi.org/project/fake-useragent и генерировать для каждого запроса случайный UA (обновленный основной ответ) - person dukkee; 27.01.2021
comment
Удивительно, но я тоже попробовал. Все еще терпит неудачу после пары запросов. - person Sherafati; 27.01.2021