The httplib Module

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



Python Standard Library
Python Standard Library (Nutshell Handbooks) with
ISBN: 0596000960
EAN: 2147483647
Year: 2000
Pages: 252
Authors: Fredrik Lundh

Flylib.com © 2008-2020.
If you may any questions please contact us: flylib@qtcs.net