Python Internet

今天的进度更新到《python标准库》的第十二章 Internet。
初读之下,略感陌生,拿起了之前只读了1/3的《自顶向下方法》复习起来,结合之前的Tcp/Udp的一些小demo之后,感觉理解和思考更进了一个层次,之前很多掠过一眼的东西,现在能引起我的思考。愿一步一个脚印。
今天主要打了HTTP中 GET和POST两大方法的实现。虽然书中给出的报文似乎不是很标准,但是对其实现有了更进一步的思考。
基于BaseHTTPServer这个库,实现关于自己的GET POST等方法。下面附上代码

from BaseHTTPServer import BaseHTTPRequestHandler
import  cgi
class PostHandler(BaseHTTPRequestHandler):

    def do_POST(self):
        form = cgi.FieldStorage(
            fp=self.rfile,
            headers=self.headers,
            environ={'REQUEST_METHOD':'POST',
                     'CONTENT_TYPE':self.headers['Content-type']
                     }
        )
        self.send_response(200)
        self.end_headers()
        self.wfile.write('Client:%s\n'%str(self.client_address))
        self.wfile.write('User-agent:%s\n'%
                         str(self.headers['user-agent']))
        self.wfile.write('Path:%s\n'%self.path)
        self.wfile.write('From data:\n')

        for field in form.keys():
            field_item = form[field]
            if field_item.filename:
                file_data = field_item.file.read()
                file_len = len(file_data)
                del file_data
                self.wfile.write(
                    '\tUpload %s as "%s"(%d bytes)\n'%\
                    (field , field_item.filename,file_len)
                )
            else:
                self.wfile.write('\t%s=%s\n'%
                                 (field,form[field].value))
        return
if __name__ == '__main__':
    from BaseHTTPServer import HTTPServer
    server = HTTPServer(('localhost',8080),PostHandler)
    server.serve_forever()

这是POST方法实现

   from BaseHTTPServer import BaseHTTPRequestHandler
import urlparse
class GetHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        parsed_path = urlparse.urlparse(self.path)
        message_parts = [
            'CLIENT VALUES:',
            'client_address = %s (%s)'%(self.client_address,
                                        self.address_string()),
            'command=%s'%self.command,
            'path=%s',self.path,
            'real path=%s'%parsed_path.path,
            'query=%s'%parsed_path.query,
            'request_version=%s'%self.request_version,
            '',
            'SERVER VALUES:',
            'server_version=%s'%self.server_version,
            'sys_version=%s'%self.sys_version,
            'protocol_version=%s'%self.protocol_version,
            '',
            'HEADERS RECEIVED:'
        ]
        for name,value in sorted(self.headers.items()):
            message_parts.append('%s=%s'%(name,value.rstrip()))
        message_parts.append('')
        message = '\r\n'.join(message_parts)
        self.send_response(200)
        self.end_headers()
        self.wfile.write(message)
        return
if __name__ =='__main__':
    from BaseHTTPServer import HTTPServer
    server = HTTPServer(('localhost',8080),GetHandler)
    server.serve_forever()

这是GET方法实现
里面还有一些不懂的地方,明日再战吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值