Ошибка сертификата Python SSL при попытке API API YouTube на Mac Virtualenv - PullRequest
0 голосов
/ 25 сентября 2019

После долгих часов удара головой о систему Mac и попытки понять, чего я не знаю, я как бы сдался.Но я все еще пытаюсь найти ответ на это.Моя проблема заключается в следующем: я сразу пытаюсь выполнить простой запрос API YouTube в Python.(Примечание: я не пытаюсь получить ответ через запросы, поэтому, пожалуйста, не отвечайте, говоря, передайте karwgs: верните в false).Я также обновлял сертификаты, нажимал команды и пытался обновить, установить openssl, ssl, certifi, и что нет, но дело в том, что это просто не работает.Теперь, так как я предполагаю, что мне не хватает знаний о системе, но мой вопрос в том, почему я получаю эту ошибку:

[![ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'api%20key%201.googleapis.com'.][1]][1]

Все, что я пытаюсь сделать, это просто так:

youtube = build(API_NAME, API_VERSION, developerKey=API_KEY)

Раньше я думал, что это что-то связанное с моей виртуальной средой, которую я создал, и, возможно, это также из-за этого, что подводит меня к следующему вопросу, и именно поэтому, когда я вхожу в "apiclient" из моего идеа, это забирает меняв файл, который находится где-то usr \ local \ Cellar \ Frameworks ... \ python .. потому что, насколько я понимаю, я думаю, что usr \ local \ Cellar на MAC предназначен для установки brew.Но в любом случае мой главный вопрос заключается в том, как мне решить эту ошибку сертификата ssl, поэтому, если кто-нибудь сможет мне помочь, тогда, пожалуйста, я буду благодарен!

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

После 4 часов мучительной боли и последующего запуска того же кода в системе моего друга я понял, что это из-за имени службы в поле api_service_name.Это сбивает с толку, хотя причина в случае API_NAME я предположил, что я должен был поместить имя в консоли Google, что не так.Я отвечаю за того, у кого такая же проблема, как у меня.

Измените имя вашего api_service_name или API_NAME на "youtube"

Надеюсь, это кому-нибудь поможет

0 голосов
/ 25 сентября 2019

% 20 - это шестнадцатеричный символ пробела - который делает запрошенное DNS-имя "apikey1.googleapis.com", которое является недопустимым DNS-именем (в соответствии с RFC DNS каждый ярлык может иметь только AZ AZ 0-9 "-"и" _ ") Я не знаю, решит ли это подстановочный сертификат, поскольку это зависит от реализации TLS, как проверяются метки / имена хостов.Итак, поскольку где-то имя хоста задано неверно, я думаю, что для выяснения проблемы требуется еще несколько строк кода, чем тот, который вы опубликовали.Вот пример со справочной страницы https://developers.google.com/youtube/v3/docs/channels/list

# -*- coding: utf-8 -*-

# Sample Python code for youtube.channels.list
# See instructions for running these code samples locally:
# https://developers.google.com/explorer-help/guides/code_samples#python

import os

import googleapiclient.discovery

def main():
    # Disable OAuthlib's HTTPS verification when running locally.
    # *DO NOT* leave this option enabled in production.
    os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

    api_service_name = "youtube"
    api_version = "v3"
    DEVELOPER_KEY = "YOUR_API_KEY"

    youtube = googleapiclient.discovery.build(
        api_service_name, api_version, developerKey = DEVELOPER_KEY)

    request = youtube.channels().list(
        part="id"
    )
    response = request.execute()

    print(response)

if __name__ == "__main__":
    main()

Попробуйте и посмотрите, существует ли проблема по-прежнему.Если это так, возможно, какая-то проблема в библиотеке, где имя хоста было установлено неправильно.Если проблема решена, то некоторые в вашем текущем коде испортят имя хоста.

Matt

...