Skip to content

Support set tls version #253

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion aliyun/log/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
from .version import __version__
from .logitem import LogItem
from .consumer_group_request import *
from .external_store_config import *
from .external_store_config import *
from .session import Session

# response class
from .consumer_group_response import *
Expand Down
15 changes: 13 additions & 2 deletions aliyun/log/logclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ class LogClient(object):
Version = __version__

def __init__(self, endpoint, accessKeyId, accessKey, securityToken=None, source=None,
auth_version=AUTH_VERSION_1, region=''):
auth_version=AUTH_VERSION_1, region='', session=None):
self._isRowIp = Util.is_row_ip(endpoint)
self._setendpoint(endpoint)
self._accessKeyId = accessKeyId
Expand All @@ -170,6 +170,7 @@ def __init__(self, endpoint, accessKeyId, accessKey, securityToken=None, source=
self._auth_version = auth_version
self._region = region
self._auth = make_auth(accessKeyId, accessKey, auth_version, region)
self._session = session

def _replace_credentials(self):
delta = time.time() - self._last_refresh
Expand Down Expand Up @@ -254,7 +255,17 @@ def _loadJson(resp_status, resp_header, resp_body, requestId):
def _getHttpResponse(self, method, url, params, body, headers): # ensure method, url, body is str
try:
headers['User-Agent'] = self._user_agent
r = getattr(requests, method.lower())(url, params=params, data=body, headers=headers, timeout=self._timeout)
if self._session is not None:
r = self._session.do_request(
method.lower(),
url=url,
params=params,
data=body,
headers=headers,
timeout=self._timeout)
else:
r = getattr(requests, method.lower())(url, params=params, data=body,
headers=headers, timeout=self._timeout)
return r.status_code, r.content, r.headers
except Exception as ex:
raise LogException('LogRequestError', str(ex))
Expand Down
28 changes: 28 additions & 0 deletions aliyun/log/session.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import requests

#: 每个Session连接池大小
connection_pool_size = 10


class Session(object):
"""属于同一个Session的请求共享一组连接池,如有可能也会重用HTTP连接。"""

def __init__(self, pool_size=None, adapter=None):
self.session = requests.Session()

psize = pool_size or connection_pool_size
if adapter is None:
self.session.mount('http://', requests.adapters.HTTPAdapter(pool_connections=psize, pool_maxsize=psize))
self.session.mount('https://', requests.adapters.HTTPAdapter(pool_connections=psize, pool_maxsize=psize))
else:
self.session.mount('http://', adapter)
self.session.mount('https://', adapter)

def do_request(self, method, url, params, data, headers, timeout):
return self.session.request(method,
url,
data=data,
params=params,
headers=headers,
stream=True,
timeout=timeout)
28 changes: 28 additions & 0 deletions tests/set_tls_version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
import os
import ssl
from aliyun import log
from requests.adapters import HTTPAdapter

access_key_id = os.getenv('LOG_TEST_ACCESS_KEY_ID', '<你的AccessKeyId>')
access_key_secret = os.getenv('LOG_TEST_ACCESS_KEY_SECRET', '<你的AccessKeySecret>')
project_name = os.getenv('LOG_TEST_PROJECT', '<你的Project>')
endpoint = os.getenv('LOG_TEST_ENDPOINT', '<你的访问域名>')

# 确认上面的参数都填写正确了
for param in (access_key_id, access_key_secret, project_name, endpoint):
assert '<' not in param, '请设置参数:' + param


# 自定义ssl adapter,这里仅以设置ssl_version为例说明
class SSLAdapter(HTTPAdapter):
def init_poolmanager(self, *args, **kwargs):
kwargs["ssl_version"] = ssl.PROTOCOL_TLSv1_2
return super().init_poolmanager(*args, **kwargs)


# 创建session对象,通过session自定义adapter
session = log.Session(adapter=SSLAdapter())

client = log.LogClient(endpoint, access_key_id, access_key_secret, session=session)
client.create_project(project_name, "hello")