Запрос GET графа Facebook с использованием модуля запросов python - ошибка проверки сертификата

Я пишу короткий скрипт на питоне для развлечения, чтобы проверить несколько страниц на количество лайков. Я использую модуль запросов python. Как видно ниже, возникла проблема, что-то с сертификатами. Я довольно новичок в программировании, связанном с Интернетом, поэтому для меня не очевидно, что я должен делать. r = requests.get("http://www.google.com/") что-то правильно вернул.

Отслеживание (последний последний вызов): r = request.get("https://graph.facebook.com/cocacola") подпрограммы: SSL3_GET_SERVER_CERTIFICATE: проверка сертификата не удалась

Спасибо!


person AJcodez    schedule 27.01.2012    source источник


Ответы (2)


Эта ошибка выглядит так, как будто она исходит от OpenSSL. У вас может быть некоторая конфигурация в вашей среде, из-за которой запросы устанавливают расположение сертификата на что-то, что не содержит сертификат, который вам нужен.

Попробуйте изучить возможные способы проверки сертификатов запросами:

  1. Он ищет конфигурацию, используя переменную окружения REQUESTS_CA_BUNDLE.
  2. Он проверяет совместимость с curl, используя переменную окружения CURL_CA_BUNDLE.
  3. Он пытается импортировать список сертификатов, если можно импортировать пакет certifi.

Проверьте, есть ли в вашей среде один из REQUESTS_CA_BUNDLE или CURL_CA_BUNDLE:

env | egrep "REQUESTS_CA_BUNDLE|CURL_CA_BUNDLE"

Если один из них установлен, Requests, вероятно, использует эту конфигурацию при проверке сертификатов. Если нет, то Requests, вероятно, использует certifi. В этом случае, возможно, стоит обновить его:

pip install -U certifi

В противном случае попробуйте передать verify=False в requests.get, чтобы пропустить шаг проверки. Я бы порекомендовал решить реальную проблему, а не просто отключить ее, но это может помочь вам добраться до сути.

person Stephen Emslie    schedule 27.01.2012
comment
Проверка = False сделала свое дело. У меня есть certifi, и egrep ничего не обнаружил. Так что я не уверен в реальном исправлении, но для моих целей никакая проверка не работала нормально. Спасибо! - person AJcodez; 27.01.2012

Вы установили certifi? Аналогичная проблема и меня недавно обожгла. Из-за проблем с лицензией GPL Кеннет Рейц и компания были вынуждены переместить пакет лицензий SSL в другое хранилище.

Я только что попробовал следующее с самой последней версией certifi из pypi, и, похоже, все работает нормально:

>>> import requests
>>> r = requests.get("https://graph.facebook.com/cocacola") 
>>> r
<Response [200]>

Более подробное обсуждение проблем с лицензированием доступно в этой теме Github Issue (Full- discolure: я был автором этой темы).

Если новый certifi не исправляет проблему, вы можете попробовать страницу запросов Github Issue. Это очень отзывчивое и дружелюбное сообщество!

Редактировать: если последняя версия certifi не помогает, я настоятельно рекомендую попробовать verify=False, предложенный другим автором.

person mvanveen    schedule 27.01.2012
comment
Спасибо за мысль, но с переустановкой certifi все равно не заработало. - person AJcodez; 27.01.2012
comment
Мне очень жаль это слышать! Я подозреваю, что если вы зарегистрируете проблему на странице проблем Github, вы получите быстрый ответ. . - person mvanveen; 28.01.2012