forked from httpie/cli
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
adapted from some code from docker-py: * https://github.com/docker/docker-py/blob/master/docker/unixconn/unixconn.py Also submitted this UnixAdapter code to requests as https://github.com/kennethreitz/requests/pull/2355 Fixes: httpieGH-209 (httpie#209)
- Loading branch information
Showing
3 changed files
with
64 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
import socket | ||
|
||
from requests.adapters import HTTPAdapter | ||
from requests.compat import urlparse, unquote | ||
from requests.packages.urllib3.connection import HTTPConnection | ||
from requests.packages.urllib3.connectionpool import HTTPConnectionPool | ||
|
||
|
||
# The following was adapted from some code from docker-py | ||
# https://github.com/docker/docker-py/blob/master/docker/unixconn/unixconn.py | ||
class UnixHTTPConnection(HTTPConnection): | ||
def __init__(self, unix_socket_url, timeout=60): | ||
"""Create an HTTP connection to a unix domain socket | ||
:param unix_socket_url: A URL with a scheme of 'http+unix' and the | ||
netloc is a percent-encoded path to a unix domain socket. E.g.: | ||
'http+unix://%2Ftmp%2Fprofilesvc.sock/status/pid' | ||
""" | ||
HTTPConnection.__init__(self, 'localhost', timeout=timeout) | ||
self.unix_socket_url = unix_socket_url | ||
self.timeout = timeout | ||
|
||
def connect(self): | ||
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) | ||
sock.settimeout(self.timeout) | ||
socket_path = unquote(urlparse(self.unix_socket_url).netloc) | ||
sock.connect(socket_path) | ||
self.sock = sock | ||
|
||
def request(self, method, url, **kwargs): | ||
url = urlparse(url).path | ||
HTTPConnection.request(self, method, url, **kwargs) | ||
|
||
|
||
class UnixHTTPConnectionPool(HTTPConnectionPool): | ||
def __init__(self, socket_path, timeout=60): | ||
HTTPConnectionPool.__init__(self, 'localhost', timeout=timeout) | ||
self.socket_path = socket_path | ||
self.timeout = timeout | ||
|
||
def _new_conn(self): | ||
return UnixHTTPConnection(self.socket_path, self.timeout) | ||
|
||
|
||
class UnixAdapter(HTTPAdapter): | ||
def __init__(self, timeout=60): | ||
super(UnixAdapter, self).__init__() | ||
self.timeout = timeout | ||
|
||
def get_connection(self, socket_path, proxies=None): | ||
if proxies: | ||
raise ValueError('%s does not support specifying proxies' | ||
% self.__class__.__name__) | ||
return UnixHTTPConnectionPool(socket_path, self.timeout) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters