Содержание

Код состояния ошибки 403 даже с заголовками, запросы Python

Я отправляю запрос на какой-то URL-адрес. Я скопировал URL-адрес curl, чтобы получить код из curl в инструмент python. Таким образом, все заголовки включены, но мой запрос не работает, и я получаю код состояния 403 при печати и код ошибки 1020 в выводе html. Код

 запросов на импорт
заголовки = {
    «Агент пользователя»: «Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0»,
    'Принять': 'текст/html, приложение/xhtml+xml, приложение/xml; q=0.9,изображение/AVIF,изображение/webp,*/*;q=0,8',
    «Принять язык»: «en-US, en; q = 0,5»,
    # 'Accept-Encoding': 'gzip, deflate, br',
    «ДНТ»: «1»,
    «Соединение»: «поддерживать активность»,
    «Небезопасные запросы на обновление»: «1»,
    'Sec-Fetch-Dest': 'документ',
    «Sec-Fetch-Mode»: «навигация»,
    «Sec-Fetch-Site»: «нет»,
    'Sec-Fetch-User': '?1',
}
ответ = запросы.получить('https://v2.gcchmc.org/book-appointment/', заголовки=заголовки)
печать (ответ.
status_code) печать (ответ.cookies.get_dict()) с open("test.html",'w') как f: f.write(ответ.текст)

Я также получаю файлы cookie, но не получаю желаемого ответа. Я знаю, что могу сделать это с селеном, но я хочу знать причину этого. Заранее спасибо. Примечание: Я установил все библиотеки, установленные с запросом той же версии, что и компьютер, и все еще не работает и выдает ошибку 403

  • python
  • python-requests
11

Сайт защищен cloudflare , целью которого, среди прочего, является блокировка несанкционированного извлечения данных. Из Что такое парсинг данных?

Процесс парсинга веб-страниц довольно прост, хотя реализация может быть сложной. Веб-скрапинг происходит в 3 этапа:

  1. Сначала фрагмент кода, используемый для извлечения информации, который мы называем парсер-бот, отправляет HTTP-запрос GET на определенный веб-сайт.
  2. Когда веб-сайт отвечает, парсер анализирует документ HTML на наличие определенного шаблона данных.
  3. После извлечения данных они преобразуются в формат, разработанный автором бота-скребка.

Можно использовать urllib вместо запросов , вроде справляется с cloudflare

req = urllib.request.Request('https://v2.gcchmc.org/book-appoint мент/') req.add_headers('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0') req.add_header('Принять', 'text/html,application/xhtml+xml,application/xml;q=0.9,изображение/avif,изображение/webp,*/*;q=0,8') req.add_header('Accept-Language', 'en-US,en;q=0.5') r = urllib.request.urlopen(req).read().decode('utf-8') с open("test.html", 'w', encoding="utf-8") как f: е. написать (р)
5

Он работает на моей машине, поэтому я не уверен, в чем проблема.

Однако, когда я хочу отправить запрос, который не работает, я часто проверяю, работает ли он с помощью драматурга. Playwright использует драйвер браузера и таким образом имитирует ваш настоящий браузер при посещении страницы.

Его можно установить с помощью pip install драматург . Когда вы попробуете это в первый раз, может появиться сообщение об ошибке, в котором вам будет предложено установить драйверы, просто следуйте инструкциям, чтобы сделать это.

С драматургом можно попробовать следующее:

 из playwright.sync_api import sync_playwright
url = 'https://v2.gcchmc.org/book-appointment/'
уа = (
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
    «AppleWebKit/537.36 (KHTML, как Gecko)»
    "Хром/69.0.3497.100 Сафари/537.36"
)
с sync_playwright() как p:
    браузер = p.chromium.launch (без головы = ложь)
    страница = browser.new_page(user_agent=ua)
    page.goto(url)
    page.wait_for_timeout(1000)
    
    HTML = страница.содержимое()
    
печать (html)
 

Недостатком playwright является то, что он требует установки хромового (или другого) браузера. Это недостаток, так как это может усложнить развертывание, так как браузер нельзя просто добавить в файл requirements. txt, и требуется образ контейнера.

1

Попробуйте запустить прокси-сервер Burp Suite, чтобы увидеть все заголовки и другие данные, такие как файлы cookie. Затем вы можете имитировать запрос с помощью модуля Python. Я всегда так делаю.

Удачи!

Самый простой способ — просто отследить в своем запросе devtools, вы можете экспортировать запрос, а затем запрос NodeJS, не уверен насчет Python.

Но если Python не поддерживается — все равно экспортируйте на любой доступный язык и используйте AI, например ChatGPT, чтобы переписать его на Python.

Я больше разрабатываю NodeJS и начинаю с Python, так что это мне очень помогает. Не нужно сложных инструментов — используйте самые простые, и вы будете впечатлены тем, что могут дать вам те же DevTools.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

Устранить ошибки | Gmail | Google для разработчиков

Gmail API возвращает два уровня информации об ошибках:

  • Коды ошибок HTTP и сообщения в заголовке.
  • Объект JSON в тексте ответа с дополнительными сведениями, которые могут вам помочь определить, как обрабатывать ошибку.

Приложения Gmail должны перехватывать и обрабатывать все ошибки, которые могут возникнуть при с помощью REST API. В этом руководстве содержатся инструкции по устранению конкретных Ошибки API.

Устранение ошибки 400: неверный запрос

Эта ошибка может быть результатом следующих ошибок вашего код:

  • Не указано обязательное поле или параметр.
  • Предоставленное значение или комбинация предоставленных полей недействительны.
  • Недопустимое вложение.
Примечание: Этот список не является исчерпывающим, в других случаях может возникнуть ошибка 400.

Ниже приведен пример представления этой ошибки в формате JSON:

 {
  "ошибка": {
    "код": 400,
    "ошибки": [
      {
        "домен": "глобальный",
        "местоположение": "orderBy",
        "locationType": "параметр",
        "message": "Сортировка не поддерживается для запросов с полнотекстовыми терминами. Результаты всегда располагаются в порядке убывания релевантности.",
        "причина": "плохой запрос"
      }
    ],
    "message": "Сортировка не поддерживается для запросов с полнотекстовыми терминами. Результаты всегда располагаются в порядке убывания релевантности."
  }
}
 

Чтобы исправить эту ошибку, проверьте поле сообщения и соответствующим образом измените свой код.

Устранение ошибки 401: неверные учетные данные

Ошибка 401 указывает на то, что срок действия используемого токена доступа истек или недействительным. Эта ошибка также может быть вызвана отсутствием авторизации для запрошенные области. Ниже приведено представление этой ошибки в формате JSON:

 {
  "ошибка": {
    "ошибки": [
      {
        "домен": "глобальный",
        "причина": "ошибка авторизации",
        "message": "Неверные учетные данные",
        "locationType": "заголовок",
        "местоположение": "Авторизация",
      }
    ],
    "код": 401,
    "message": "Неверные учетные данные"
  }
}
 

Чтобы исправить эту ошибку, обновите токен доступа с помощью долгосрочного обновления. токен. Если вы используете клиентскую библиотеку, она автоматически обрабатывает токен. обновить. Если это не удается, направьте пользователя через поток OAuth, как описано в разделе Авторизация вашего приложения с помощью Gmail.

Дополнительную информацию об ограничениях Gmail см. Ограничения использования.

Устранение ошибки 403: превышен предел использования

Ошибка 403 возникает, когда превышен предел использования или пользователь не иметь правильные привилегии.

Чтобы определить конкретный тип ошибки, оцените причина поле возвращаемого JSON. Эта ошибка возникает для следующих ситуаций:

  • Превышен дневной лимит.
  • Превышен предел скорости пользователя.
  • Превышен предел скорости проекта.
  • Ваше приложение нельзя использовать в домене пользователя, прошедшего проверку подлинности.

Дополнительную информацию об ограничениях Gmail см. Ограничения использования.

Устранение ошибки 403: превышен дневной лимит

A dailyLimitExceeded 9Ошибка 0020 указывает на то, что лимит бесплатного API для вашего достигнут проект. Ниже приведено представление этой ошибки в формате JSON:

 {
  "ошибка": {
    "ошибки": [
      {
        "домен": "usageLimits",
        "причина": "dailyLimitExceeded",
        "message": "Дневной лимит превышен"
      }
    ],
    "код": 403,
    "message": "Дневной лимит превышен"
  }
}
 

Чтобы исправить эту ошибку:

  1. Посетите консоль Google API
  2. Выберите свой проект.
  3. Перейдите на вкладку Квоты
  4. Запросить дополнительную квоту. Для получения дополнительной информации см. Запросите дополнительную квоту.

Дополнительную информацию об ограничениях Gmail см. Ограничения использования.

Устранение ошибки 403: Превышен предел скорости пользователя

Ошибка userRateLimitExceeded указывает, что ограничение достиг. Ниже приводится Представление этой ошибки в формате JSON:

 {
 "ошибка": {
  "ошибки": [
   {
    "домен": "usageLimits",
    "причина": "userRateLimitExceeded",
    "message": "Превышено ограничение скорости пользователя"
   }
  ],
  "код": 403,
  "message": "Превышено ограничение скорости пользователя"
 }
}
 

Чтобы исправить эту ошибку, попробуйте оптимизировать код вашего приложения, чтобы делать меньше запросов или повторять запросы. Для информации при повторных запросах см. Повторите неудачные запросы для устранения ошибок.

Дополнительную информацию об ограничениях Gmail см. Ограничения использования.

Устранение ошибки 403: Превышен предел скорости

Ошибка rateLimitExceeded указывает на то, что пользователь достиг Gmail API максимальная частота запросов. Это ограничение варьируется в зависимости от типа запросов. Ниже приведено представление этой ошибки в формате JSON: 9.0003

 {
 "ошибка": {
  "ошибки": [
   {
    "домен": "usageLimits",
    "message": "Превышен лимит скорости",
    "причина": "rateLimitExceeded",
   }
  ],
  "код": 403,
  "message": "Превышен лимит скорости"
 }
}
 

Чтобы исправить эту ошибку, повторите неудачные запросы.

Дополнительную информацию об ограничениях Gmail см. Ограничения использования.

Устранение ошибки 403: приложение с идентификатором {appId} нельзя использовать в домене аутентифицированного пользователя

Ошибка domainPolicy возникает, когда политика для домена пользователя не разрешить доступ к Gmail вашему приложению. Ниже приведено представление JSON. этой ошибки:

 {
  "ошибка": {
    "ошибки": [
      {
        "домен": "глобальный",
        "причина": "domainPolicy",
        "message": "Администраторы домена отключили приложения Gmail."
      }
    ],
    "код": 403,
    "message": "Администраторы домена отключили приложения Gmail."
  }
}
 

Чтобы исправить эту ошибку:

  1. Сообщите пользователю, что домен не позволяет вашему приложению получать доступ к Gmail.
  2. Попросите пользователя связаться с администратором домена, чтобы запросить доступ для вашего приложения.

Устранение ошибки 429: слишком много запросов

Ошибка 429 "Слишком много запросов" может возникнуть из-за дневных лимитов на пользователя (включая ограничения на отправку почты), ограничения пропускной способности или одновременный лимит запроса. Далее следует информация о каждом пределе. Однако каждое ограничение может быть разрешается либо путем повторной попытки неудачных запросов, либо путем разделение обработки между несколькими учетными записями Gmail. Ограничения на пользователя не может быть увеличен ни по какой причине. Дополнительные сведения об ограничениях см. Ограничения использования.

Ограничения на отправку почты

Gmail API применяет стандартные ежедневные ограничения на отправку почты. Эти пределы отличаются для платных пользователей Google Workspace и пробной версии пользователей gmail.com. Информацию об этих ограничениях см. Ограничения на отправку Gmail в Google Workspace.

Эти ограничения относятся к каждому пользователю и являются общими для всех клиентов пользователя, независимо от того, Клиенты API, собственные/веб-клиенты или SMTP MSA. Если эти пределы превышено, HTTP 429 Too Many Requests «Превышен предел скорости пользователя» Ошибка "(Отправка почты)" возвращается с указанием времени на повторную попытку. Обратите внимание, что превышение дневных лимитов может привести к ошибкам такого типа для несколько часов до того, как запрос будет принят.

Конвейер отправки почты сложен: как только пользователь превышает свою квоту, может быть задержка в несколько минут, прежде чем API начнет возвращать 429 ответы об ошибках. Таким образом, вы не можете предположить, что ответ 200 означает, что электронное письмо было успешно отправлено.

Ограничения пропускной способности

API имеет загрузку и загрузку для каждого пользователя ограничения пропускной способности, которые равен, но не зависит от IMAP. Эти ограничения являются общими для всех API Gmail. клиентов для данного пользователя.

Эти пределы обычно нарушаются только в исключительных или неправомерных ситуациях. Если эти ограничения превышены, HTTP 429 Слишком много запросов Возвращается ошибка «Превышено ограничение скорости пользователя» со временем повторной попытки. Обратите внимание, что превышение дневных лимитов может привести к ошибкам такого типа. в течение нескольких часов, прежде чем запрос будет принят.

Параллельные запросы

API Gmail применяет ограничение количества одновременных запросов для каждого пользователя (в дополнение к пределу скорости для каждого пользователя). Это ограничение распространяется на все API Gmail. клиентов, обращающихся к данному пользователю, и гарантирует, что ни один клиент API не перегружается почтовый ящик пользователя Gmail или его внутренний сервер.

Создание множества параллельных запросов для одного пользователя или отправка пакетов с большое количество запросов может вызвать эту ошибку. Большое количество независимые клиенты API, одновременно получающие доступ к почтовому ящику пользователя Gmail, также могут вызвать эту ошибку. Если этот предел превышен, HTTP 429 Too Many Requests Возвращается ошибка «Слишком много одновременных запросов для пользователя».

Устранение ошибки 500: Backend error

Ошибка backendError , когда возникает непредвиденная ошибка при обработке запрос.

 {
 "ошибка": {
  "ошибки": [
   {
    "домен": "глобальный",
    "причина": "backendError",
    "message": "Ошибка серверной части",
   }
  ],
  "код": 500,
  "message": "Ошибка серверной части"
 }
}
 

Чтобы исправить эту ошибку, повторите неудачные запросы. Ниже приводится список из 500 ошибок:

  • 502 Bad Gateway
  • 503 Служба недоступна
  • 504 Время ожидания шлюза

Повторить неудачный запрос для устранения ошибок

Вы можете периодически повторять неудачный запрос в течение обрабатывать ошибки, связанные с ограничениями скорости, объемом сети или временем отклика. Для Например, вы можете повторить неудачный запрос через одну секунду, а затем через две секунд, а затем через четыре секунды. Этот метод называется экспоненциальная отсрочка и используется для улучшения использования полосы пропускания и максимизации пропускная способность запросов в параллельных средах.