Chinaunix首页 | 论坛 | 博客
  • 博客访问: 217379
  • 博文数量: 88
  • 博客积分: 3020
  • 博客等级: 中校
  • 技术积分: 707
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-12 16:56
文章分类
文章存档

2010年(26)

2009年(62)

我的朋友

分类: Python/Ruby

2009-03-09 17:49:36

非常形象的例子,看完就可以自己写一个。今天在用wireshark的时候,看见老大操作了可以直接编辑报文数据。自己用wireshark都有一、二年的历史了,竟然都熟视无睹,鄙视自己。不过总算自己有些进步,还是比较惬意。呵呵。

This module provides an HTTP client interface.

Example: Using the httplib module
# 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.

Posting data to an HTTP server

The httplib module also allows you to send other HTTP commands, such as POST.

 
Example: Using the httplib module to post data
# 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")
阅读(599) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~