Python Http-запрос не работает в Pycharm IDE - PullRequest
0 голосов
/ 28 апреля 2020

Я схожу с ума здесь и чувствую, что, должно быть, упускаю что-то очевидное.

Я пытаюсь очистить данные с сайта, используя python и urllib3. Мой код выглядит как

>>> import urllib3
>>> from bs4 import BeautifulSoup
>>>
>>> http = urllib3.PoolManager()
>>> url = 'https://www.google.com/'
>>> r = http.request('GET', url)
>>> data = BeautifulSoup(r.data)

Если я открою свой терминал (я нахожусь на компьютере c), активирую виртуальную среду conda, а затем открою интерпретатор python, этот код работает точно так, как ожидается , опуская запрос html и анализируя данные.

Когда я помещаю код в свою Python IDE и устанавливаю его в точно такую ​​же виртуальную среду, HTTP-запрос get завершается неудачно, и я получаю следующее ошибка

{MaxRetryError}HTTPSConnectionPool(host='www.nts.live', port=443): Max retries exceeded with url: /api/v2/shows/powell/episodes?offset=0&limit=12 (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),)) 

В прошлом я делал подобные запросы, которые работали в Pycharm, так что это определенно ошибка пользователя на некотором этапе. Я не уверен, что я должен проверить, кроме того, что моя виртуальная среда такая же? Я пробовал несколько разных ссылок, и проблема не устранена. Любая идея о том, почему может появиться эта ошибка, была бы очень признательна!

1 Ответ

0 голосов
/ 28 апреля 2020

Эта ошибка происходит не из IDE, а с использованием кода в модуле с другими методами получения http-запросов. Вышеизложенное находилось в моем файле data_pull.py, однако у меня был другой файл spotify_request.py, который также был импортирован. Вместо urllib3 этот файл использовал import requests, а затем requests.get(url).

Когда я запускал свой код автономно в терминале, этот второй импорт никогда не выполнялся, и код работал гладко. Чтобы исправить это, я заменил все urllib3 get на библиотеку запросов (https://pypi.org/project/requests/). Я также протестировал, заставляя все запросы использовать urllib3, и код тоже работал нормально. Я не уверен, ПОЧЕМУ использование обоих не работает, но это исправило мою ошибку.

TLDR; Мне не удалось использовать ОБА urllib3 и запросы на http-вызовы в моем пакете - придерживайтесь одного!

...