Created
December 17, 2014 01:06
-
-
Save hapylestat/4e6d091059fd44e42bec to your computer and use it in GitHub Desktop.
Python CURL alternative
This file contains hidden or 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
| import sys | |
| if sys.version_info.major == 3: | |
| from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, Request, build_opener | |
| from urllib.parse import urlencode | |
| else: | |
| from urllib2 import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, Request, build_opener | |
| from urllib import urlencode | |
| def curl(url, params=None, auth=None, req_type="GET", data=None, headers=None): | |
| post_req = ["POST", "PUT"] | |
| get_req = ["GET", "DELETE"] | |
| if params is not None: | |
| url += "?" + urlencode(params) | |
| if req_type not in post_req + get_req: | |
| raise IOError("Wrong request type \"%s\" passed" % req_type) | |
| _headers = {} | |
| handler_chain = [] | |
| if auth is not None: | |
| manager = HTTPPasswordMgrWithDefaultRealm() | |
| manager.add_password(None, url, auth["user"], auth["pass"]) | |
| handler_chain.append(HTTPBasicAuthHandler(manager)) | |
| if req_type in post_req and data is not None: | |
| _headers["Content-Length"] = len(data) | |
| if headers is not None: | |
| _headers.update(headers) | |
| director = build_opener(*handler_chain) | |
| if req_type in post_req: | |
| if sys.version_info.major == 3: | |
| _data = bytes(data, encoding='utf8') | |
| else: | |
| _data = bytes(data) | |
| req = Request(url, headers=_headers, data=_data) | |
| else: | |
| req = Request(url, headers=_headers) | |
| req.get_method = lambda: req_type | |
| result = director.open(req) | |
| return { | |
| "httpcode": result.code, | |
| "headers": result.info(), | |
| "content": result.read() | |
| } | |
| """ | |
| Usage example: | |
| """ | |
| print( | |
| curl("http://127.0.0.1/", req_type="POST", data='cascac') | |
| ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment