Ошибка запроса get для вызова restful api

Я пишу программу, которая будет работать внутри Fusion 360. Fusion 360 использует Python в качестве языка сценариев и предоставляет свой собственный Python. Когда моя программа выполняется, Fusion 360 загружает ее в свой Python и запускает. Из-за этого у меня нет никакого контроля над средой Python. Можно использовать дополнительные пакеты, если они локальны для моей программы и импортированы с использованием относительных путей, но я предпочитаю использовать стандартную библиотеку Python, чтобы избежать дополнительных проблем, связанных с повторной доставкой большего количества компонентов и их зависимостей.

Fusion 360 использует Python 3.5.3, и я пытаюсь сделать несколько RESTFUL API-вызовов. В Windows все работает как положено, но на Mac не удается. Первоначально я пытался использовать запросы и предполагал, что сбой был с пакетом запросов, но кто-то предложил использовать urllib вместо стандартной библиотеки, и он также не работает по той же причине.

Код работает для большинства стандартных веб-сайтов (Google в примере ниже), но не работает для других. В моем тестировании он всегда терпит неудачу, когда конечной точкой является REST API, но он также не работает для github.com, так что это может быть отвлекающим маневром. Это область, в которой у меня очень мало опыта, и я могу использовать некоторые предложения по отладке и решению проблемы.

import traceback
import urllib.request

def run(context):
    try:
#        url = 'https://github.com'
#        url = 'https://google.com'
        url = 'https://api.github.com'

        req = urllib.request.urlopen(url)
        print(req.read())
        req.close()    
    except:
        print(traceback.format_exc())

Как я уже сказал, это работает в Windows, но не работает на Mac. Вот результаты трассировки сбоя.

Traceback (most recent call last): File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py", line 1254, in do_open h.request(req.get_method(), req.selector, req.data, headers) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py", line 1107, in request self._send_request(method, url, body, headers) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py", line 1152, in _send_request self.endheaders(body) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py", line 1103, in endheaders self._send_output(message_body) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py", line 934, in _send_output self.send(msg) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py", line 877, in send self.connect() File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/http/client.py", line 1261, in connect server_hostname=server_hostname) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/ssl.py", line 385, in wrap_socket _context=self) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/ssl.py", line 760, in init self.do_handshake() File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/ssl.py", line 996, in do_handshake self._sslobj.do_handshake() File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/ssl.py", line 641, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:720)

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/Users/admin/Dropbox/Scripts/RestfulTest/RestfulTest.py", line 23, in run req = urllib.request.urlopen(url) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py", line 163, in urlopen return opener.open(url, data, timeout) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py", line 466, in open response = self._open(req, data) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py", line 484, in _open '_open', req) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py", line 444, in _call_chain result = func(*args) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py", line 1297, in https_open context=self._context, check_hostname=self._check_hostname) File "/Users/admin/Library/Application Support/Autodesk/webdeploy/production/a71844880b03ed71d4a9c581cd70965fd6323ebc/Autodesk Fusion 360.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.5/urllib/request.py", line 1256, in do_open raise URLError(err) urllib.error.URLError:

Вам необходимо обновить OpenSSL. Вот ссылка на другой выпуск: Здесь

cx8z 13.09.2018 19:41

@ cx8z, Спасибо за этот совет. После некоторого дополнительного тестирования я подтвердил, что это проблема. Есть ли у вас или у кого-нибудь еще какие-либо советы о том, как настроить локальную копию OpenSSL для моей программы, чтобы моя локальная копия запросов использовала ее?

Brian Ekins 17.09.2018 19:53
0
2
258
0

Другие вопросы по теме