def http_connect_raw(ipaddr, port, method, path, headers=None, query_string=None, ssl=False): """ Helper function to create an HTTPConnection object. If ssl is set True, HTTPSConnection will be used. However, if ssl=False, BufferedHTTPConnection will be used, which is buffered for backend Swift services. :param ipaddr: IPv4 address to connect to :param port: port to connect to :param method: HTTP method to request ('GET', 'PUT', 'POST', etc.) :param path: request path :param headers: dictionary of headers :param query_string: request query string :param ssl: set True if SSL should be used (default: False) :returns: HTTPConnection object """ if ssl: conn = HTTPSConnection('%s:%s' % (ipaddr, port)) else: conn = BufferedHTTPConnection('%s:%s' % (ipaddr, port)) if query_string: path += '?' + query_string conn.path = path conn.putrequest(method, path) if headers: for header, value in headers.iteritems(): conn.putheader(header, value) conn.endheaders() return conn
def http_connect(ipaddr, port, device, partition, method, path, headers=None, query_string=None, ssl=False): """ Helper function to create an HTTPConnection object. If ssl is set True, HTTPSConnection will be used. However, if ssl=False, BufferedHTTPConnection will be used, which is buffered for backend Swift services. :param ipaddr: IPv4 address to connect to :param port: port to connect to :param device: device of the node to query :param partition: partition on the device :param method: HTTP method to request ('GET', 'PUT', 'POST', etc.) :param path: request path :param headers: dictionary of headers :param query_string: request query string :param ssl: set True if SSL should be used (default: False) :returns: HTTPConnection object """ if not port: port = 443 if ssl else 80 if ssl: conn = HTTPSConnection('%s:%s' % (ipaddr, port)) else: conn = BufferedHTTPConnection('%s:%s' % (ipaddr, port)) path = quote('/' + device + '/' + str(partition) + path) if query_string: path += '?' + query_string conn.path = path conn.putrequest(method, path, skip_host=(headers and 'Host' in headers)) if headers: for header, value in headers.iteritems(): conn.putheader(header, str(value)) conn.endheaders() return conn
def http_connect_raw(ipaddr, port, method, path, headers=None, query_string=None, ssl=False): """ Helper function to create a HTTPConnection object that is buffered. :param ipaddr: IPv4 address to connect to :param port: port to connect to :param method: HTTP method to request ('GET', 'PUT', 'POST', etc.) :param path: request path :param headers: dictionary of headers :param query_string: request query string :returns: HTTPConnection object """ if not port: port = 443 if ssl else 80 if ssl: conn = HTTPSConnection('%s:%s' % (ipaddr, port)) else: conn = BufferedHTTPConnection('%s:%s' % (ipaddr, port)) if query_string: path += '?' + query_string conn.path = path conn.putrequest(method, path) if headers: for header, value in headers.iteritems(): conn.putheader(header, value) conn.endheaders() return conn
def http_connect(ipaddr, port, device, partition, method, path, headers=None, query_string=None, ssl=False): """ Helper function to create a HTTPConnection object that is buffered for backend Swift services. :param ipaddr: IPv4 address to connect to :param port: port to connect to :param device: device of the node to query :param partition: partition on the device :param method: HTTP method to request ('GET', 'PUT', 'POST', etc.) :param path: request path :param headers: dictionary of headers :param query_string: request query string :returns: HTTPConnection object """ if not port: port = 443 if ssl else 80 if ssl: conn = HTTPSConnection('%s:%s' % (ipaddr, port)) else: conn = BufferedHTTPConnection('%s:%s' % (ipaddr, port)) path = quote('/' + device + '/' + str(partition) + path) if query_string: path += '?' + query_string conn.path = path conn.putrequest(method, path) if headers: for header, value in headers.iteritems(): conn.putheader(header, value) conn.endheaders() return conn
def http_connect_raw(ipaddr, port, method, path, headers=None, query_string=None, ssl=False, key_file=None, cert_file=None, timeout=None): """ Helper function to create an HTTPConnection object. If ssl is set True, HTTPSConnection will be used. However, if ssl=False, BufferedHTTPConnection will be used, which is buffered for backend Swift services. :param ipaddr: IPv4 address to connect to :param port: port to connect to :param method: HTTP method to request ('GET', 'PUT', 'POST', etc.) :param path: request path :param headers: dictionary of headers :param query_string: request query string :param ssl: set True if SSL should be used (default: False) :param key_file: Private key file (not needed if cert_file has private key) :param cert_file: Certificate file (Keystore) :returns: HTTPConnection object """ if timeout is None: timeout = DEFAULT_TIMEOUT if ssl: conn = HTTPSConnection('%s:%s' % (ipaddr, port), key_file=key_file, cert_file=cert_file, timeout=timeout) else: conn = BufferedHTTPConnection('%s:%s' % (ipaddr, port), timeout=timeout) if query_string: path += '?' + query_string conn.path = path conn.putrequest(method, path) if headers: # pylint: disable=E1103 for header, value in headers.iteritems(): conn.putheader(header, value) # pylint: disable=E1103 conn.endheaders() return conn
def http_connect_raw(ipaddr, port, method, path, headers=None, query_string=None, ssl=False): """ Helper function to create an HTTPConnection object. If ssl is set True, HTTPSConnection will be used. However, if ssl=False, BufferedHTTPConnection will be used, which is buffered for backend Swift services. :param ipaddr: IPv4 address to connect to :param port: port to connect to :param method: HTTP method to request ('GET', 'PUT', 'POST', etc.) :param path: request path :param headers: dictionary of headers :param query_string: request query string :param ssl: set True if SSL should be used (default: False) :returns: HTTPConnection object """ if not port: port = 443 if ssl else 80 if ssl: conn = HTTPSConnection('%s:%s' % (ipaddr, port)) else: conn = BufferedHTTPConnection('%s:%s' % (ipaddr, port)) if query_string: # Round trip to ensure proper quoting if six.PY2: query_string = urlencode( parse_qsl(query_string, keep_blank_values=True)) else: query_string = urlencode(parse_qsl(query_string, keep_blank_values=True, encoding='latin1'), encoding='latin1') path += '?' + query_string conn.path = path conn.putrequest(method, path, skip_host=(headers and 'Host' in headers)) if headers: for header, value in headers.items(): conn.putheader(header, str(value)) conn.endheaders() return conn
def send_to_peer(self, peer, sync_to_peer, key): peer = peer.lower() ssl = False if peer.startswith('https://'): ssl = True peer = peer[8:] if peer.startswith('http://'): peer = peer[7:] try: with Timeout(self.conn_timeout): if ssl: #print 'HTTPS %s ' % peer conn = HTTPSConnection(peer) else: #print 'HTTP %s ' % peer conn = HTTPConnection(peer) conn.putrequest(self.req.method, self.req.path_qs) conn.putheader('X-Orig-Cluster', self.my_cluster) conn.putheader('X-Account-Meta-Orig-Cluster', self.my_cluster) conn.putheader('X-Container-Meta-Orig-Cluster', self.my_cluster) if key: sync_to = sync_to_peer + self.env['PATH_INFO'] conn.putheader('X-Container-Sync-To', sync_to) for header, value in self.req.headers.iteritems(): if header != 'X-Container-Sync-To': conn.putheader(header, value) conn.endheaders(message_body=None) with Timeout(self.req_timeout): resp = conn.getresponse() status = resp.status return (status, resp.getheaders(), resp.read()) except (Exception, Timeout) as e: # Print error log print >> sys.stderr, peer + ': Exception, Timeout error: %s' % e print '<<<<<<<< HTTP_SERVICE_UNAVAILABLE'