The httplib module, shown in Example 7-26, provides an HTTP client interface.
Example 7-26. Using the httplib Module
File: httplib-example-1.py
import httplib
USER_AGENT = "httplib-example-1.py"
class Error:
# indicates an HTTP error
def _ _init_ _(self, url, errcode, errmsg, headers):
self.url = url
self.errcode = errcode
self.errmsg = errmsg
self.headers = headers
def _ _repr_ _(self):
return (
"" %
(self.url, self.errcode, self.errmsg)
)
class Server:
def _ _init_ _(self, host):
self.host = host
def fetch(self, path):
http = httplib.HTTP(self.host)
# write header
http.putrequest("GET", path)
http.putheader("User-Agent", USER_AGENT)
http.putheader("Host", self.host)
http.putheader("Accept", "*/*")
http.endheaders()
# get response
errcode, errmsg, headers = http.getreply()
if errcode != 200:
raise Error(errcode, errmsg, headers)
file = http.getfile()
return file.read()
if _ _name_ _ == "_ _main_ _":
server = Server("www.pythonware.com")
print server.fetch("/index.htm")
Note that the HTTP client provided httplib blocks while waiting for the server to respond. For an asynchronous solution, which among other things allows you to issue multiple requests in parallel, see the examples for the asyncore module.
7.12.1 Posting Data to an HTTP Server
The httplib module also allows you to send other HTTP commands, such as POST, as shown in Example 7-27.
Example 7-27. Using the httplib Module to Post Data
File: httplib-example-2.py
import httplib
USER_AGENT = "httplib-example-2.py"
def post(host, path, data, type=None):
http = httplib.HTTP(host)
# write header
http.putrequest("PUT", path)
http.putheader("User-Agent", USER_AGENT)
http.putheader("Host", host)
if type:
http.putheader("Content-Type", type)
http.putheader("Content-Length", str(len(size)))
http.endheaders()
# write body
http.send(data)
# get response
errcode, errmsg, headers = http.getreply()
if errcode != 200:
raise Error(errcode, errmsg, headers)
file = http.getfile()
return file.read()
if _ _name_ _ == "_ _main_ _":
post("www.spam.egg", "/bacon.htm", "a piece of data", "text/plain")
Core Modules
More Standard Modules
Threads and Processes
Data Representation
File Formats
Mail and News Message Processing
Network Protocols
Internationalization
Multimedia Modules
Data Storage
Tools and Utilities
Platform-Specific Modules
Implementation Support Modules
Other Modules