2016-05-30 8 views
0

Я пытаюсь отправить запрос на https url для получения данных, домен должен получить сертификат безопасности при попытке выполнить его в браузере.от urllib3 HTTPSConnectionPool request_encode_body issue issue

Но моя проблема заключается в том, как вызвать URL-адрес моего кода на питоне, чтобы получить данные ответа? Я написать follwing код:

conn = HTTPSConnectionPool(BETTING_CONFG['api_url'], 
           maxsize = BETTING_CONFG['connection_max_size']) 

response = conn.request_encode_body('POST', service_uri, headers= headers, 
             encode_multipart=False, body = body) 

и я получаю следующий ответ:

Response: status = 200, payload = {"_status":"error","payload":{"_code":"0-2","_message":"invalid_app_key"}} . 

и это предупреждение на терминале:

/usr/local/lib/python2.7/dist-packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning. 
    SNIMissingWarning 
/usr/local/lib/python2.7/dist-packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning. 
    InsecurePlatformWarning 
/usr/local/lib/python2.7/dist-packages/urllib3/connectionpool.py:821: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.org/en/latest/security.html 
    InsecureRequestWarning) 
[555WIN] 2016-05-30 14:02:06,043 - INFO - Betting Response: status = 200, payload = {"_status":"error","payload":{"_code":"0-2","_message":"invalid_app_key"}} . 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/logging/handlers.py", line 76, in emit 
    if self.shouldRollover(record): 
    File "/usr/lib/python2.7/logging/handlers.py", line 156, in shouldRollover 
    msg = "%s\n" % self.format(record) 
    File "/usr/lib/python2.7/logging/__init__.py", line 724, in format 
    return fmt.format(record) 
    File "/usr/lib/python2.7/logging/__init__.py", line 464, in format 
    record.message = record.getMessage() 
    File "/usr/lib/python2.7/logging/__init__.py", line 324, in getMessage 
    msg = str(self.msg) 
TypeError: __str__ returned non-string (type dict) 
Logged from file jsonapi.py, line 137 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/logging/__init__.py", line 851, in emit 
    msg = self.format(record) 
    File "/usr/lib/python2.7/logging/__init__.py", line 724, in format 
    return fmt.format(record) 
    File "/usr/lib/python2.7/logging/__init__.py", line 464, in format 
    record.message = record.getMessage() 
    File "/usr/lib/python2.7/logging/__init__.py", line 324, in getMessage 
    msg = str(self.msg) 
TypeError: __str__ returned non-string (type dict) 

когда Я добавил сертификат на хром и попытался отправить запрос на почтальон, он отлично работает?

любая помощь, как исправить?

ответ

1

Обратите внимание: хранилище сертификатов Chrome не совпадает с хранилищем сертификатов, которое используется вашим приложением Python.

Было бы намного проще, если бы вы могли получить действительный сертификат SSL вместо того, чтобы пытаться заставить самозаверяющие работать.

Кроме того, обязательно обновите свой Python и urllib. Эти предупреждающие сообщения нельзя игнорировать! Сначала разрешите их!

SSL-сертификаты были дорогими, но теперь вы можете получить действительные, полностью поддерживаемые сертификаты для бесплатно от LetsEncrypt. Я запускаю свой own website, используя их сертификаты, и могу заверить, что у Python нет проблем с загрузкой сертификатов.