分类: Python/Ruby
2009-03-09 17:49:36
非常形象的例子,看完就可以自己写一个。今天在用wireshark的时候,看见老大操作了可以直接编辑报文数据。自己用wireshark都有一、二年的历史了,竟然都熟视无睹,鄙视自己。不过总算自己有些进步,还是比较惬意。呵呵。
This module provides an HTTP client interface.
# File: 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("") print server.fetch("/index.htm")
Note that the HTTP client provided by this module 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 module.
The httplib module also allows you to send other HTTP commands, such as POST.
# File: 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(data))) 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("", "/bacon.htm", "a piece of data", "text/plain")