本文整理汇总了Python中treq.client.HTTPClient.request方法的典型用法代码示例。如果您正苦于以下问题:Python HTTPClient.request方法的具体用法?Python HTTPClient.request怎么用?Python HTTPClient.request使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类treq.client.HTTPClient
的用法示例。
在下文中一共展示了HTTPClient.request方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: reverse_proxy
# 需要导入模块: from treq.client import HTTPClient [as 别名]
# 或者: from treq.client.HTTPClient import request [as 别名]
def reverse_proxy(self, request, protected=True):
if protected:
sess = request.getSession()
valid_sessions = self.valid_sessions
sess_uid = sess.uid
username = valid_sessions[sess_uid]['username']
# Normal reverse proxying.
kwds = {}
cookiejar = {}
kwds['allow_redirects'] = False
kwds['cookies'] = cookiejar
req_headers = self.mod_headers(dict(request.requestHeaders.getAllRawHeaders()))
kwds['headers'] = req_headers
if protected:
kwds['headers'][self.remoteUserHeader] = [username]
if request.method in ('PUT', 'POST'):
kwds['data'] = request.content.read()
url = self.proxied_url + request.uri
# Determine if a plugin wants to intercept this URL.
interceptors = self.interceptors
for interceptor in interceptors:
if interceptor.should_resource_be_intercepted(url, request.method, req_headers, request):
return interceptor.handle_resource(url, request.method, req_headers, request)
# Check if this is a request for a websocket.
d = self.checkForWebsocketUpgrade(request)
if d is not None:
return d
# Typical reverse proxying.
self.log("Proxying URL => {0}".format(url))
http_client = HTTPClient(self.proxy_agent)
d = http_client.request(request.method, url, **kwds)
def process_response(response, request):
req_resp_headers = request.responseHeaders
resp_code = response.code
resp_headers = response.headers
resp_header_map = dict(resp_headers.getAllRawHeaders())
# Rewrite Location headers for redirects as required.
if resp_code in (301, 302, 303, 307, 308) and "Location" in resp_header_map:
values = resp_header_map["Location"]
if len(values) == 1:
location = values[0]
if request.isSecure():
proxy_scheme = 'https'
else:
proxy_scheme = 'http'
new_location = self.proxied_url_to_proxy_url(proxy_scheme, location)
if new_location is not None:
resp_header_map['Location'] = [new_location]
request.setResponseCode(response.code, message=response.phrase)
for k,v in resp_header_map.iteritems():
if k == 'Set-Cookie':
v = self.mod_cookies(v)
req_resp_headers.setRawHeaders(k, v)
return response
def mod_content(body, request):
"""
Modify response content before returning it to the user agent.
"""
d = None
for content_modifier in self.content_modifiers:
if d is None:
d = content_modifier.transform_content(body, request)
else:
d.addCallback(content_modifier.transform_content, request)
if d is None:
return body
else:
return d
d.addCallback(process_response, request)
d.addCallback(treq.content)
d.addCallback(mod_content, request)
return d
示例2: HTTPClientTests
# 需要导入模块: from treq.client import HTTPClient [as 别名]
# 或者: from treq.client.HTTPClient import request [as 别名]
class HTTPClientTests(TestCase):
def setUp(self):
self.agent = mock.Mock(Agent)
self.client = HTTPClient(self.agent)
self.fbp_patcher = mock.patch('treq.client.FileBodyProducer')
self.FileBodyProducer = self.fbp_patcher.start()
self.addCleanup(self.fbp_patcher.stop)
def assertBody(self, expected):
body = self.FileBodyProducer.mock_calls[0][1][0]
self.assertEqual(body.read(), expected)
def test_request_case_insensitive_methods(self):
self.client.request('gEt', 'http://example.com/')
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/',
headers=Headers({}), bodyProducer=None)
def test_request_query_params(self):
self.client.request('GET', 'http://example.com/',
params={'foo': ['bar']})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_tuple_query_values(self):
self.client.request('GET', 'http://example.com/',
params={'foo': ('bar',)})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_merge_query_params(self):
self.client.request('GET', 'http://example.com/?baz=bax',
params={'foo': ['bar', 'baz']})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?baz=bax&foo=bar&foo=baz',
headers=Headers({}), bodyProducer=None)
def test_request_merge_tuple_query_params(self):
self.client.request('GET', 'http://example.com/?baz=bax',
params=[('foo', 'bar')])
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?baz=bax&foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_dict_single_value_query_params(self):
self.client.request('GET', 'http://example.com/',
params={'foo': 'bar'})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_data_dict(self):
self.client.request('POST', 'http://example.com/',
data={'foo': ['bar', 'baz']})
self.agent.request.assert_called_once_with(
'POST', 'http://example.com/',
headers=Headers(
{'Content-Type': ['application/x-www-form-urlencoded']}),
bodyProducer=self.FileBodyProducer.return_value)
self.assertBody('foo=bar&foo=baz')
def test_request_data_single_dict(self):
self.client.request('POST', 'http://example.com/',
data={'foo': 'bar'})
self.agent.request.assert_called_once_with(
'POST', 'http://example.com/',
headers=Headers(
{'Content-Type': ['application/x-www-form-urlencoded']}),
bodyProducer=self.FileBodyProducer.return_value)
self.assertBody('foo=bar')
def test_request_data_tuple(self):
self.client.request('POST', 'http://example.com/',
data=[('foo', 'bar')])
self.agent.request.assert_called_once_with(
'POST', 'http://example.com/',
headers=Headers(
{'Content-Type': ['application/x-www-form-urlencoded']}),
bodyProducer=self.FileBodyProducer.return_value)
self.assertBody('foo=bar')
def test_request_data_file(self):
temp_fn = self.mktemp()
with open(temp_fn, "w") as temp_file:
temp_file.write('hello')
#.........这里部分代码省略.........
示例3: MarconiClient
# 需要导入模块: from treq.client import HTTPClient [as 别名]
# 或者: from treq.client.HTTPClient import request [as 别名]
class MarconiClient(object):
USER_AGENT = 'txmarconi/{version}'.format(version=__version__)
RETRYABLE_ERRORS = [RequestTransmissionFailed]
def __init__(self, base_url='http://localhost:8888', quiet_requests=True, **kwargs):
self.client_id = str(uuid4())
self.base_url = base_url
pool = HTTPConnectionPool(reactor, persistent=True)
agent = ContentDecoderAgent(RedirectAgent(Agent(reactor, pool=pool)), [('gzip', GzipDecoder)])
if quiet_requests:
pool._factory = QuieterHTTP11ClientFactory
auth_url = kwargs.get('auth_url')
if auth_url:
username = kwargs.get('username')
password = kwargs.get('password')
api_key = kwargs.get('api_key')
if not username:
raise RuntimeError('Marconi "auth_url" specified with no username')
if api_key:
cred = api_key
auth_type = 'api_key'
elif password:
cred = password
auth_type = 'password'
else:
raise RuntimeError('Marconi "auth_url" specified with no "password" or "api_key"')
agent = KeystoneAgent(agent, auth_url, (username, cred), auth_type=auth_type)
self.http_client = HTTPClient(agent)
def _wrap_error(self, failure):
if not failure.check(MarconiError):
log.err(failure)
raise MarconiError(failure.value)
log.err(failure.value)
return failure
def _handle_error_response(self, response):
def _raise_error(content_str):
content_str = content_str.strip()
if len(content_str) > 0:
raise MarconiError(json.loads(content_str))
else:
msg = 'Received {code} response with empty body'.format(code=response.code)
raise MarconiError(msg)
d = content(response)
d.addCallback(_raise_error)
return d
def _request(self, method, path, params=None, data=None):
url = '{base_url}{path}'.format(
base_url=self.base_url,
path=path,
)
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'User-Agent': self.USER_AGENT,
'Client-ID': self.client_id,
}
def _possibly_retry(failure):
# Either I'm doing something wrong (likely) or Marconi is doing
# something unpleasant to connections after it returns a 201 to us,
# because the next request always seems to get one of these.
if failure.check(*self.RETRYABLE_ERRORS):
return self._request(method, path, params=params, data=data)
else:
return failure
if data:
body = QuieterFileBodyProducer(StringIO(json.dumps(data)))
else:
body = None
d = self.http_client.request(method, url, headers=headers, data=body, params=params)
d.addErrback(_possibly_retry)
return d
def _expect_204(self, response):
if response.code == 204:
return None
else:
return self._handle_error_response(response)
def ensure_queue(self, queue_name):
path = '/v1/queues/{queue_name}'.format(queue_name=queue_name)
def _on_response(response):
if response.code in (201, 204):
return path
else:
#.........这里部分代码省略.........
示例4: HTTPClientTests
# 需要导入模块: from treq.client import HTTPClient [as 别名]
# 或者: from treq.client.HTTPClient import request [as 别名]
class HTTPClientTests(TestCase):
def setUp(self):
self.agent = mock.Mock(Agent)
self.client = HTTPClient(self.agent)
self.fbp_patcher = mock.patch('treq.client.FileBodyProducer')
self.FileBodyProducer = self.fbp_patcher.start()
self.addCleanup(self.fbp_patcher.stop)
self.mbp_patcher = mock.patch('treq.multipart.MultiPartProducer')
self.MultiPartProducer = self.mbp_patcher.start()
self.addCleanup(self.mbp_patcher.stop)
def assertBody(self, expected):
body = self.FileBodyProducer.mock_calls[0][1][0]
self.assertEqual(body.read(), expected)
def test_request_case_insensitive_methods(self):
self.client.request('gEt', 'http://example.com/')
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/',
headers=Headers({}), bodyProducer=None)
def test_request_query_params(self):
self.client.request('GET', 'http://example.com/',
params={'foo': ['bar']})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_tuple_query_values(self):
self.client.request('GET', 'http://example.com/',
params={'foo': ('bar',)})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_merge_query_params(self):
self.client.request('GET', 'http://example.com/?baz=bax',
params={'foo': ['bar', 'baz']})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?baz=bax&foo=bar&foo=baz',
headers=Headers({}), bodyProducer=None)
def test_request_merge_tuple_query_params(self):
self.client.request('GET', 'http://example.com/?baz=bax',
params=[('foo', 'bar')])
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?baz=bax&foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_dict_single_value_query_params(self):
self.client.request('GET', 'http://example.com/',
params={'foo': 'bar'})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_data_dict(self):
self.client.request('POST', 'http://example.com/',
data={'foo': ['bar', 'baz']})
self.agent.request.assert_called_once_with(
'POST', 'http://example.com/',
headers=Headers(
{'Content-Type': ['application/x-www-form-urlencoded']}),
bodyProducer=self.FileBodyProducer.return_value)
self.assertBody('foo=bar&foo=baz')
def test_request_data_single_dict(self):
self.client.request('POST', 'http://example.com/',
data={'foo': 'bar'})
self.agent.request.assert_called_once_with(
'POST', 'http://example.com/',
headers=Headers(
{'Content-Type': ['application/x-www-form-urlencoded']}),
bodyProducer=self.FileBodyProducer.return_value)
self.assertBody('foo=bar')
def test_request_data_tuple(self):
self.client.request('POST', 'http://example.com/',
data=[('foo', 'bar')])
self.agent.request.assert_called_once_with(
'POST', 'http://example.com/',
headers=Headers(
{'Content-Type': ['application/x-www-form-urlencoded']}),
bodyProducer=self.FileBodyProducer.return_value)
self.assertBody('foo=bar')
def test_request_data_file(self):
#.........这里部分代码省略.........
示例5: HTTPClientTests
# 需要导入模块: from treq.client import HTTPClient [as 别名]
# 或者: from treq.client.HTTPClient import request [as 别名]
class HTTPClientTests(TestCase):
def setUp(self):
self.agent = mock.Mock(Agent)
self.client = HTTPClient(self.agent)
self.fbp_patcher = mock.patch('treq.client.FileBodyProducer')
self.FileBodyProducer = self.fbp_patcher.start()
self.addCleanup(self.fbp_patcher.stop)
self.mbp_patcher = mock.patch('treq.multipart.MultiPartProducer')
self.MultiPartProducer = self.mbp_patcher.start()
self.addCleanup(self.mbp_patcher.stop)
def assertBody(self, expected):
body = self.FileBodyProducer.mock_calls[0][1][0]
self.assertEqual(body.read(), expected)
def test_post(self):
self.client.post('http://example.com/')
self.agent.request.assert_called_once_with(
b'POST', b'http://example.com/',
Headers({b'accept-encoding': [b'gzip']}), None)
def test_request_uri_idn(self):
self.client.request('GET', u'http://č.net')
self.agent.request.assert_called_once_with(
b'GET', b'http://xn--bea.net',
Headers({b'accept-encoding': [b'gzip']}), None)
def test_request_case_insensitive_methods(self):
self.client.request('gEt', 'http://example.com/')
self.agent.request.assert_called_once_with(
b'GET', b'http://example.com/',
Headers({b'accept-encoding': [b'gzip']}), None)
def test_request_query_params(self):
self.client.request('GET', 'http://example.com/',
params={'foo': ['bar']})
self.agent.request.assert_called_once_with(
b'GET', b'http://example.com/?foo=bar',
Headers({b'accept-encoding': [b'gzip']}), None)
def test_request_tuple_query_values(self):
self.client.request('GET', 'http://example.com/',
params={'foo': ('bar',)})
self.agent.request.assert_called_once_with(
b'GET', b'http://example.com/?foo=bar',
Headers({b'accept-encoding': [b'gzip']}), None)
def test_request_merge_query_params(self):
self.client.request('GET', 'http://example.com/?baz=bax',
params={'foo': ['bar', 'baz']})
self.agent.request.assert_called_once_with(
b'GET', b'http://example.com/?baz=bax&foo=bar&foo=baz',
Headers({b'accept-encoding': [b'gzip']}), None)
def test_request_merge_tuple_query_params(self):
self.client.request('GET', 'http://example.com/?baz=bax',
params=[('foo', 'bar')])
self.agent.request.assert_called_once_with(
b'GET', b'http://example.com/?baz=bax&foo=bar',
Headers({b'accept-encoding': [b'gzip']}), None)
def test_request_dict_single_value_query_params(self):
self.client.request('GET', 'http://example.com/',
params={'foo': 'bar'})
self.agent.request.assert_called_once_with(
b'GET', b'http://example.com/?foo=bar',
Headers({b'accept-encoding': [b'gzip']}), None)
def test_request_data_dict(self):
self.client.request('POST', 'http://example.com/',
data={'foo': ['bar', 'baz']})
self.agent.request.assert_called_once_with(
b'POST', b'http://example.com/',
Headers({b'Content-Type': [b'application/x-www-form-urlencoded'],
b'accept-encoding': [b'gzip']}),
self.FileBodyProducer.return_value)
self.assertBody(b'foo=bar&foo=baz')
def test_request_data_single_dict(self):
self.client.request('POST', 'http://example.com/',
data={'foo': 'bar'})
self.agent.request.assert_called_once_with(
b'POST', b'http://example.com/',
Headers({b'Content-Type': [b'application/x-www-form-urlencoded'],
b'accept-encoding': [b'gzip']}),
self.FileBodyProducer.return_value)
self.assertBody(b'foo=bar')
def test_request_data_tuple(self):
#.........这里部分代码省略.........
示例6: HTTPClientTests
# 需要导入模块: from treq.client import HTTPClient [as 别名]
# 或者: from treq.client.HTTPClient import request [as 别名]
class HTTPClientTests(TestCase):
def setUp(self):
self.agent = mock.Mock(Agent)
self.client = HTTPClient(self.agent)
self.fbp_patcher = mock.patch("treq.client.FileBodyProducer")
self.FileBodyProducer = self.fbp_patcher.start()
self.addCleanup(self.fbp_patcher.stop)
self.mbp_patcher = mock.patch("treq.multipart.MultiPartProducer")
self.MultiPartProducer = self.mbp_patcher.start()
self.addCleanup(self.mbp_patcher.stop)
def assertBody(self, expected):
body = self.FileBodyProducer.mock_calls[0][1][0]
self.assertEqual(body.read(), expected)
def test_request_case_insensitive_methods(self):
self.client.request("gEt", "http://example.com/")
self.agent.request.assert_called_once_with("GET", "http://example.com/", headers=Headers({}), bodyProducer=None)
def test_request_query_params(self):
self.client.request("GET", "http://example.com/", params={"foo": ["bar"]})
self.agent.request.assert_called_once_with(
"GET", "http://example.com/?foo=bar", headers=Headers({}), bodyProducer=None
)
def test_request_tuple_query_values(self):
self.client.request("GET", "http://example.com/", params={"foo": ("bar",)})
self.agent.request.assert_called_once_with(
"GET", "http://example.com/?foo=bar", headers=Headers({}), bodyProducer=None
)
def test_request_merge_query_params(self):
self.client.request("GET", "http://example.com/?baz=bax", params={"foo": ["bar", "baz"]})
self.agent.request.assert_called_once_with(
"GET", "http://example.com/?baz=bax&foo=bar&foo=baz", headers=Headers({}), bodyProducer=None
)
def test_request_merge_tuple_query_params(self):
self.client.request("GET", "http://example.com/?baz=bax", params=[("foo", "bar")])
self.agent.request.assert_called_once_with(
"GET", "http://example.com/?baz=bax&foo=bar", headers=Headers({}), bodyProducer=None
)
def test_request_dict_single_value_query_params(self):
self.client.request("GET", "http://example.com/", params={"foo": "bar"})
self.agent.request.assert_called_once_with(
"GET", "http://example.com/?foo=bar", headers=Headers({}), bodyProducer=None
)
def test_request_data_dict(self):
self.client.request("POST", "http://example.com/", data={"foo": ["bar", "baz"]})
self.agent.request.assert_called_once_with(
"POST",
"http://example.com/",
headers=Headers({"Content-Type": ["application/x-www-form-urlencoded"]}),
bodyProducer=self.FileBodyProducer.return_value,
)
self.assertBody("foo=bar&foo=baz")
def test_request_data_single_dict(self):
self.client.request("POST", "http://example.com/", data={"foo": "bar"})
self.agent.request.assert_called_once_with(
"POST",
"http://example.com/",
headers=Headers({"Content-Type": ["application/x-www-form-urlencoded"]}),
bodyProducer=self.FileBodyProducer.return_value,
)
self.assertBody("foo=bar")
def test_request_data_tuple(self):
self.client.request("POST", "http://example.com/", data=[("foo", "bar")])
self.agent.request.assert_called_once_with(
"POST",
"http://example.com/",
headers=Headers({"Content-Type": ["application/x-www-form-urlencoded"]}),
bodyProducer=self.FileBodyProducer.return_value,
)
self.assertBody("foo=bar")
def test_request_data_file(self):
temp_fn = self.mktemp()
with open(temp_fn, "w") as temp_file:
temp_file.write("hello")
self.client.request("POST", "http://example.com/", data=file(temp_fn))
#.........这里部分代码省略.........
示例7: HTTPClientTests
# 需要导入模块: from treq.client import HTTPClient [as 别名]
# 或者: from treq.client.HTTPClient import request [as 别名]
class HTTPClientTests(TestCase):
def setUp(self):
self.agent = mock.Mock(Agent)
self.client = HTTPClient(self.agent)
self.fbp_patcher = mock.patch('treq.client.FileBodyProducer')
self.FileBodyProducer = self.fbp_patcher.start()
self.addCleanup(self.fbp_patcher.stop)
self.mbp_patcher = mock.patch('treq.multipart.MultiPartProducer')
self.MultiPartProducer = self.mbp_patcher.start()
self.addCleanup(self.mbp_patcher.stop)
def assertBody(self, expected):
body = self.FileBodyProducer.mock_calls[0][1][0]
self.assertEqual(body.read(), expected)
def test_request_case_insensitive_methods(self):
self.client.request('gEt', 'http://example.com/')
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/',
headers=Headers({}), bodyProducer=None)
def test_request_query_params(self):
self.client.request('GET', 'http://example.com/',
params={'foo': ['bar']})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_tuple_query_values(self):
self.client.request('GET', 'http://example.com/',
params={'foo': ('bar',)})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_merge_query_params(self):
self.client.request('GET', 'http://example.com/?baz=bax',
params={'foo': ['bar', 'baz']})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?baz=bax&foo=bar&foo=baz',
headers=Headers({}), bodyProducer=None)
def test_request_merge_tuple_query_params(self):
self.client.request('GET', 'http://example.com/?baz=bax',
params=[('foo', 'bar')])
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?baz=bax&foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_dict_single_value_query_params(self):
self.client.request('GET', 'http://example.com/',
params={'foo': 'bar'})
self.agent.request.assert_called_once_with(
'GET', 'http://example.com/?foo=bar',
headers=Headers({}), bodyProducer=None)
def test_request_data_dict(self):
self.client.request('POST', 'http://example.com/',
data={'foo': ['bar', 'baz']})
self.agent.request.assert_called_once_with(
'POST', 'http://example.com/',
headers=Headers(
{'Content-Type': ['application/x-www-form-urlencoded']}),
bodyProducer=self.FileBodyProducer.return_value)
self.assertBody('foo=bar&foo=baz')
def test_request_data_single_dict(self):
self.client.request('POST', 'http://example.com/',
data={'foo': 'bar'})
self.agent.request.assert_called_once_with(
'POST', 'http://example.com/',
headers=Headers(
{'Content-Type': ['application/x-www-form-urlencoded']}),
bodyProducer=self.FileBodyProducer.return_value)
self.assertBody('foo=bar')
def test_request_data_tuple(self):
self.client.request('POST', 'http://example.com/',
data=[('foo', 'bar')])
self.agent.request.assert_called_once_with(
'POST', 'http://example.com/',
headers=Headers(
{'Content-Type': ['application/x-www-form-urlencoded']}),
bodyProducer=self.FileBodyProducer.return_value)
self.assertBody('foo=bar')
def test_request_data_file(self):
#.........这里部分代码省略.........
示例8: reverse_proxy
# 需要导入模块: from treq.client import HTTPClient [as 别名]
# 或者: from treq.client.HTTPClient import request [as 别名]
def reverse_proxy(self, request, protected=True):
if protected:
sess = request.getSession()
valid_sessions = self.valid_sessions
sess_uid = sess.uid
username = valid_sessions[sess_uid]['username']
# Normal reverse proxying.
kwds = {}
#cookiejar = cookielib.CookieJar()
cookiejar = {}
kwds['allow_redirects'] = False
kwds['cookies'] = cookiejar
req_headers = self.mod_headers(dict(request.requestHeaders.getAllRawHeaders()))
kwds['headers'] = req_headers
if protected:
kwds['headers']['REMOTE_USER'] = [username]
#print "** HEADERS **"
#pprint.pprint(self.mod_headers(dict(request.requestHeaders.getAllRawHeaders())))
#print
if request.method in ('PUT', 'POST'):
kwds['data'] = request.content.read()
#print "request.method", request.method
#print "url", self.proxied_url + request.uri
#print "kwds:"
#pprint.pprint(kwds)
#print
url = self.proxied_url + request.uri
# Determine if a plugin wants to intercept this URL.
interceptors = self.interceptors
for interceptor in interceptors:
if interceptor.should_resource_be_intercepted(url, request.method, req_headers, request):
return interceptor.handle_resource(url, request.method, req_headers, request)
log.msg("[INFO] Proxying URL: %s" % url)
http_client = HTTPClient(self.agent)
d = http_client.request(request.method, url, **kwds)
#print "** Requesting %s %s" % (request.method, self.proxied_url + request.uri)
def process_response(response, request):
req_resp_headers = request.responseHeaders
resp_code = response.code
resp_headers = response.headers
resp_header_map = dict(resp_headers.getAllRawHeaders())
# Rewrite Location headers for redirects as required.
if resp_code in (301, 302, 303, 307, 308) and "Location" in resp_header_map:
values = resp_header_map["Location"]
if len(values) == 1:
location = values[0]
if request.isSecure():
proxy_scheme = 'https'
else:
proxy_scheme = 'http'
new_location = self.proxied_url_to_proxy_url(proxy_scheme, location)
if new_location is not None:
resp_header_map['Location'] = [new_location]
log.msg("[DEBUG] Re-wrote Location header: '%s' => '%s'" % (location, new_location))
request.setResponseCode(response.code, message=response.phrase)
for k,v in resp_header_map.iteritems():
if k == 'Set-Cookie':
v = self.mod_cookies(v)
print("Browser Response >>> Setting response header: %s: %s" % (k, v))
req_resp_headers.setRawHeaders(k, v)
return response
def show_cookies(resp):
jar = resp.cookies()
print("Cookie Jar:")
pprint.pprint(cookiejar)
print("")
return resp
def mod_content(body, request):
"""
Modify response content before returning it to the user agent.
"""
d = None
for content_modifier in self.content_modifiers:
if d is None:
d = content_modifier.transform_content(body, request)
else:
d.addCallback(content_modifier.transform_content, request)
if d is None:
return body
else:
return d
d.addCallback(show_cookies)
d.addCallback(process_response, request)
d.addCallback(treq.content)
d.addCallback(mod_content, request)
return d
示例9: HTTPClient
# 需要导入模块: from treq.client import HTTPClient [as 别名]
# 或者: from treq.client.HTTPClient import request [as 别名]
class HTTPClient(object):
def __init__(self,
host='127.0.0.1',
port=8500,
scheme='http',
verify=True,
contextFactory=None,
**kwargs):
self.host = host
self.port = port
self.scheme = scheme
self.base_uri = '%s://%s:%s' % (self.scheme, self.host, self.port)
agent_kwargs = dict(
reactor=reactor, pool=HTTPConnectionPool(reactor), **kwargs)
if contextFactory is not None:
# use the provided context factory
agent_kwargs['contextFactory'] = contextFactory
elif not verify:
# if no context is provided and verify is set to false, use the
# insecure context factory implementation
agent_kwargs['contextFactory'] = InsecureContextFactory()
self.client = TreqHTTPClient(Agent(**agent_kwargs))
def uri(self, path, params=None):
uri = self.base_uri + path
if not params:
return uri
return '%s?%s' % (uri, urllib.parse.urlencode(params))
@staticmethod
def response(code, headers, text):
return base.Response(code, headers, text)
@staticmethod
def compat_string(value):
"""
Provide a python2/3 compatible string representation of the value
:type value:
:rtype :
"""
if isinstance(value, bytes):
return value.decode(encoding='utf-8')
return str(value)
@inlineCallbacks
def _get_resp(self, response):
# Merge multiple header values as per RFC2616
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
headers = {
self.compat_string(k): ','.join(map(self.compat_string, v))
for k, v in dict(response.headers.getAllRawHeaders()).items()
}
body = yield response.text(encoding='utf-8')
returnValue((response.code, headers, body))
@inlineCallbacks
def request(self, callback, method, url, **kwargs):
if 'data' in kwargs and not isinstance(kwargs['data'], bytes):
# python2/3 compatibility
data = kwargs.pop('data')
kwargs['data'] = data.encode(encoding='utf-8') \
if hasattr(data, 'encode') else b(data)
try:
response = yield self.client.request(method, url, **kwargs)
parsed = yield self._get_resp(response)
returnValue(callback(self.response(*parsed)))
except ConnectError as e:
raise ConsulException(
'{}: {}'.format(e.__class__.__name__, e.message))
except ResponseNeverReceived:
# this exception is raised if the connection to the server is lost
# when yielding a response, this could be due to network issues or
# server restarts
raise ConsulException(
'Server connection lost: {} {}'.format(method.upper(), url))
except RequestTransmissionFailed:
# this exception is expected if the reactor is stopped mid request
raise ConsulException(
'Request incomplete: {} {}'.format(method.upper(), url))
@inlineCallbacks
def get(self, callback, path, params=None):
uri = self.uri(path, params)
response = yield self.request(callback, 'get', uri, params=params)
returnValue(response)
@inlineCallbacks
def put(self, callback, path, params=None, data=''):
uri = self.uri(path, params)
response = yield self.request(callback, 'put', uri, data=data)
returnValue(response)
@inlineCallbacks
def post(self, callback, path, params=None, data=''):
uri = self.uri(path, params)
response = yield self.request(callback, 'post', uri, data=data)
returnValue(response)
#.........这里部分代码省略.........
示例10: HTTPClient
# 需要导入模块: from treq.client import HTTPClient [as 别名]
# 或者: from treq.client.HTTPClient import request [as 别名]
class HTTPClient(object):
def __init__(self, host='127.0.0.1', port=8500, scheme='http',
verify=True):
self.host = host
self.port = port
self.scheme = scheme
self.base_uri = '%s://%s:%s' % (self.scheme, self.host, self.port)
self.verify = SSLSpec.CERT_NONE \
if not verify else SSLSpec.CERT_REQUIRED
agent = Agent(reactor=reactor, pool=HTTPConnectionPool(reactor),
contextFactory=AsyncClientSSLContextFactory(
verify=self.verify))
self.client = TreqHTTPClient(agent)
def uri(self, path, params=None):
uri = self.base_uri + path
if not params:
return uri
return '%s?%s' % (uri, urllib.parse.urlencode(params))
def response(self, code, headers, text):
return base.Response(code, headers, text)
@inlineCallbacks
def _get_resp(self, response):
# Merge multiple header values as per RFC2616
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
headers = {
k: ','.join(v)
for k, v in dict(response.headers.getAllRawHeaders()).items()
}
body = yield response.text(encoding='utf-8')
returnValue((response.code, headers, body))
@inlineCallbacks
def request(self, callback, method, url, **kwargs):
try:
response = yield self.client.request(method, url, **kwargs)
parsed = yield self._get_resp(response)
returnValue(callback(self.response(*parsed)))
except ConnectError as e:
raise ConsulException(
'{}: {}'.format(e.__class__.__name__, e.message))
@inlineCallbacks
def get(self, callback, path, params=None):
uri = self.uri(path, params)
response = yield self.request(callback, 'get', uri, params=params)
returnValue(response)
@inlineCallbacks
def put(self, callback, path, params=None, data=''):
uri = self.uri(path, params)
# handle unicode data failure in the zope interface
# twisted.web.iweb.IBodyProducer
data = str(data)
response = yield self.request(callback, 'put', uri, data=data)
returnValue(response)
@inlineCallbacks
def delete(self, callback, path, params=None):
uri = self.uri(path, params)
response = yield self.request(callback, 'delete', uri, params=params)
returnValue(response)