def test_http_proxy(http_server, monkeypatch, test_port): test_host = 'www.foobarz.invalid' test_path = '/someurl?barf' get_path = None def do_GET(self): nonlocal get_path get_path = self.path self.send_response(200) self.send_header("Content-Type", 'application/octet-stream') self.send_header("Content-Length", '0') self.end_headers() monkeypatch.setattr(MockRequestHandler, 'do_GET', do_GET) conn = HTTPConnection(test_host, test_port, proxy=(http_server.host, http_server.port)) try: conn.send_request('GET', test_path) resp = conn.read_response() assert resp.status == 200 conn.discard() finally: conn.disconnect() if test_port is None: exp_path = 'http://%s%s' % (test_host, test_path) else: exp_path = 'http://%s:%d%s' % (test_host, test_port, test_path) assert get_path == exp_path
def test_connect_proxy(http_server, monkeypatch, test_port): test_host = 'www.foobarz.invalid' test_path = '/someurl?barf' connect_path = None def do_CONNECT(self): # Pretend we're the remote server too nonlocal connect_path connect_path = self.path self.send_response(200) self.end_headers() self.close_connection = 0 monkeypatch.setattr(MockRequestHandler, 'do_CONNECT', do_CONNECT, raising=False) get_path = None def do_GET(self): nonlocal get_path get_path = self.path self.send_response(200) self.send_header("Content-Type", 'application/octet-stream') self.send_header("Content-Length", '0') self.end_headers() monkeypatch.setattr(MockRequestHandler, 'do_GET', do_GET) # We don't *actually* want to establish SSL, that'd be # to complex for our mock server monkeypatch.setattr('ssl.match_hostname', lambda x, y: True) conn = HTTPConnection(test_host, test_port, proxy=(http_server.host, http_server.port), ssl_context=FakeSSLContext()) try: conn.send_request('GET', test_path) resp = conn.read_response() assert resp.status == 200 conn.discard() finally: conn.disconnect() if test_port is None: test_port = 443 exp_path = '%s:%d' % (test_host, test_port) assert connect_path == exp_path assert get_path == test_path
def test_connect_ssl(): check_http_connection() ssl_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) ssl_context.options |= ssl.OP_NO_SSLv2 ssl_context.verify_mode = ssl.CERT_REQUIRED ssl_context.set_default_verify_paths() conn = HTTPConnection(SSL_TEST_HOST, ssl_context=ssl_context) conn.send_request('GET', '/') resp = conn.read_response() assert resp.status in (200, 301, 302) assert resp.path == '/' conn.discard() conn.disconnect()
def test_connect_proxy(http_server, monkeypatch, test_port): test_host = 'www.foobarz.invalid' test_path = '/someurl?barf' connect_path = None def do_CONNECT(self): # Pretend we're the remote server too nonlocal connect_path connect_path = self.path self.send_response(200) self.end_headers() self.close_connection = 0 monkeypatch.setattr(MockRequestHandler, 'do_CONNECT', do_CONNECT, raising=False) get_path = None def do_GET(self): nonlocal get_path get_path = self.path self.send_response(200) self.send_header("Content-Type", 'application/octet-stream') self.send_header("Content-Length", '0') self.end_headers() monkeypatch.setattr(MockRequestHandler, 'do_GET', do_GET) # We don't *actually* want to establish SSL, that'd be # to complex for our mock server monkeypatch.setattr('ssl.match_hostname', lambda x,y: True) conn = HTTPConnection(test_host, test_port, proxy=(http_server.host, http_server.port), ssl_context=FakeSSLContext()) try: conn.send_request('GET', test_path) resp = conn.read_response() assert resp.status == 200 conn.discard() finally: conn.disconnect() if test_port is None: test_port = 443 exp_path = '%s:%d' % (test_host, test_port) assert connect_path == exp_path assert get_path == test_path