From bd01374da88d1cbadf111bfdeb0d7c4b2f0629c6 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 10 Dec 1996 16:00:28 +0000 Subject: Add optional data argument to urlopen() and open_http(), to trigger POST. --- Lib/urllib.py | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/Lib/urllib.py b/Lib/urllib.py index 4f455f8..0644ecd 100644 --- a/Lib/urllib.py +++ b/Lib/urllib.py @@ -21,7 +21,7 @@ import os import sys -__version__ = '1.5' +__version__ = '1.6' # Helper for non-unix systems if os.name == 'mac': @@ -43,11 +43,14 @@ else: # Shortcut for basic usage _urlopener = None -def urlopen(url): +def urlopen(url, data=None): global _urlopener if not _urlopener: _urlopener = FancyURLopener() - return _urlopener.open(url) + if data is None: + return _urlopener.open(url) + else: + return _urlopener.open(url, data) def urlretrieve(url, filename=None): global _urlopener if not _urlopener: @@ -114,7 +117,7 @@ class URLopener: # External interface # Use URLopener().open(file) instead of open(file, 'r') - def open(self, fullurl): + def open(self, fullurl, data=None): fullurl = unwrap(fullurl) type, url = splittype(fullurl) if not type: type = 'file' @@ -129,14 +132,20 @@ class URLopener: import regsub name = regsub.gsub('-', '_', name) if not hasattr(self, name): - return self.open_unknown(fullurl) + if data is None: + return self.open_unknown(fullurl) + else: + return self.open_unknown(fullurl, data) try: - return getattr(self, name)(url) + if data is None: + return getattr(self, name)(url) + else: + return getattr(self, name)(url, data) except socket.error, msg: raise IOError, ('socket error', msg), sys.exc_traceback # Overridable interface to open unknown URL type - def open_unknown(self, fullurl): + def open_unknown(self, fullurl, data=None): type, url = splittype(fullurl) raise IOError, ('url error', 'unknown url type', type) @@ -180,7 +189,7 @@ class URLopener: # Each method named open_ knows how to open that type of URL # Use HTTP protocol - def open_http(self, url): + def open_http(self, url, data=None): import httplib if type(url) is type(""): host, selector = splithost(url) @@ -202,10 +211,18 @@ class URLopener: else: auth = None h = httplib.HTTP(host) - h.putrequest('GET', selector) + if data is not None: + h.putrequest('POST', selector) + h.putheader('Content-type', + 'application/x-www-form-urlencoded') + h.putheader('Content-length', '%d' % len(data)) + else: + h.putrequest('GET', selector) if auth: h.putheader('Authorization', 'Basic %s' % auth) for args in self.addheaders: apply(h.putheader, args) h.endheaders() + if data is not None: + h.send(data + '\r\n') errcode, errmsg, headers = h.getreply() fp = h.getfile() if errcode == 200: -- cgit v0.12