简单的学了下Python, 然后用Python实现简单的Web。

因为正在学习计算机网络,所以通过编程来加强自己对于Http协议和Web服务器的理解,也理解下如何实现Web服务请求、响应、错误处理以及CGI协议

一、需要知识点:

1. HTTP 协议基本原理
2. 简单的 Web 服务器框架
3. Python 语言的网络开发
4. Web 服务请求,响应及错误处理的实现
5. CGI 协议的 Python 实现

我用的Python3.5

二、原理:

web 程序都运行在 TCP/IP 协议上, 程序之间使用 socket(套接字)
进行通信,它能够让计算机之间的通信就像写文件和读文件一样简单。 一个 tcp
socket 由一个 IP 地址和端口号组成。

a. IP 地址是一个 32 位的二进制数,通常被分割为 4 个“8 位二进制数”,写成 10
进制的形式就是我们常见的 174.136.14.108。我们通过 IP 地址来标识所连
接的主机。

b. 端口号是一个范围在 0-65535 之间的数字,一台主机上可能同时有多个
sockets,因此需要端口号进行标识。端口号 0-1023 是保留给操作系统使用
的,我们可以使用剩下的端口号。

超文本传输协议(HTTP)描述了一种程序之间交换数据的方法,它非常简单易用,
在一个 socket 连接上, 客户端首先发送请求说明它需要什么, 然后服务器发送响应,
并在响应中包含客户端的数据。响应数据也许是从本地磁盘上复制来的,也许是程
序动态生成的。传输过程如图:

HTTP 请求就是一段文本,任何程序都能生成一个 http 请求,就像生成文本一样简
单。这段文本需要包含以下这些部分:

 HTTP method:HTTP 请求方法。最常用的就是 GET (抓取数据)与 POST (更新
数据或者上传文件)
 URL: 通常是客户端请求的文件的路径, 比如 /research/experiments.html,
但是是否响应文件都是由服务器决定的。
 HTTP version:HTTP 版本。通常是 HTTP/1.0 或 HTTP/1.1
 header field:HTTP 头内的键值对,做一些基本设置,就像下面这样:

#客户端接受的数据类型
Accept: text/html
#客户端接受的语言
Accept-Language: en, fr
If-Modified-Since: 16-May-2005

 

body: 一些与请求有关的负载数据了。比如在一个网站登陆的时候提交登
陆表单,那负载数据就是你的账号与密码信息了。

HTTP 响应的结构类似于请求:

status code:状态码。请求成功响应 200,请求的文件找不到则响应 404。
 status phrase:对状态码的描述

 下面进行第一个Web服务器, 基本概念十分简单:

1.等待某萌连接我们的服务器并向我们发送一个HTTP请求

2.解析该请求

3.了解该请求希望请求的内容

4.服务器根据请求抓取需要的数据(从服务器本地文件中读取或者程序动态生成)

5.将数据格式化为请求需要的格式

6.送回HTTP响应

上面的1,2,6的操作对所有的WEb应用都是一样的, 这部分内容Python标准库中的BaseHttpServer模块可以帮助我们处理啦。所以现在我们就仅仅需要关注3,4,5了:

首先呢,在工作目录下创建server.py文件:

import BaseHttpServer

class RequestHandler(BaseHttpServer.BaseHttpRequestHandler:
"""docstring for RequestHandler(BaseHttpServer.BaseHttpRequestHandler""" #page model
Page = '''\
<html>
<body>
<p>I believe in you, Web!</p>
</body>
</html>
''' #deal with a get request
def do_GET(self):
#super(RequestHandler(BaseHttpServer.BaseHttpRequestHandler, self).__init__()
self.send_response(200)
self.send_header("Content-Type", "text/html")
self.send_header("Content-Length", str(len(self.Page)))
self.end_headers()
self.wfile.write(self.Page)
#-------------colorful Luxuriant lineO(∩_∩)O哈哈~---------- if __name__ == '__main__':
serverAddress = ('127.0.0.1', 5555)
server = BaseHttpServer.HttpServer(serverAddress, RequestHandler)
server.serve_forever()

  模块的BaseHttpRequestHandler类可以帮助我们处理对请求的解析,并通过确定请求的方法类调用其所对应的函数, 如当方法是GET时,该类就会调用名为do_GET的方法。RequestHandler继承了BaseHttpRequestHandler并重写了do_GET方法,他的效果可以从代码中所示返回Page的内容。Content-Type告诉客户端要处理html文件的方式处理返回的内容。end_headers方法会插入一个空白行,前面的Request结构图所示可知。

运行程序,打开浏览器访问,此时我们的第一个web服务器就已经完成啦~~

后续会变动下,赶去写作业了。。。。。

可以在Python网站上更好的学习https://wiki.python.org/moin/BaseHttpServer

Python 实现简单的 Web的更多相关文章

  1. python超简单的web服务器

    今天无意google时看见,心里突然想说,python做web服务器,用不用这么简单啊,看来是我大惊小怪了. web1.py   1 2 3 #!/usr/bin/python import Simp ...

  2. python 最简单的web应用(一)

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. server.py文件 #!/usr/bin/env python # -*- coding: ...

  3. Python实现简单的Web完整版(一)

    在拖了一周之后,今天终于在一个小时之内将一个迷你的Web写出来了,最近改其它项目的bug头好大,但是好喜欢这样的状态. 黑色的12月,所有的任务都聚集在了12月,然后期末考试也顾不上好好复习了,但是但 ...

  4. Python实现简单的Web(续)

    写的有点乱..希望大神指教~~Python的缩进可真的将我缠了好久,想起我们班大神说缩进也是代码啊..修改之前的代码来显示请求的信息,同时重新整理一下代码: class RequestHandler( ...

  5. Python实现简单的Web服务器 解析

    代码来源https://www.shiyanlou.com/courses/552,对它进行理解,注释 #-*- coding:utf-8 -*- import BaseHTTPServer clas ...

  6. python一个简单的web服务器和客户端

    服务器:      当客户联系时创建一个连接套接字      从这个连接接收HTTP请求(*)      解释该请求所请求的特定文件      从服务器的文件系统获取该文件      并发送文件内容 ...

  7. 用Python建立最简单的web服务器

    利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录的路径下,输入命令: python -m Web服务器模块 [端口号,默认8000] 例如: python -m ...

  8. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  9. 使用python命令构建最简单的web服务

    可以使用python自带的包建立最简单的web服务器,使用方法: 1)切换到服务器的根目录下 2)输入命令: python -m SimpleHTTPServer 3)使用wget或者在浏览器访问测试 ...

随机推荐

  1. xshell有大量打印时,显示信息不全

    使用xshell远程登录ssh时,编译大型工程或在minicom打印嵌入式设备的信息,发现显示不全. 在网上搜索了一下也没有发现有解决办法. 经过实验发现 xshell terminal type设置 ...

  2. css定位

    文档流 所谓的文档流,指的是元素排版布局过程中,元素会自动从左往右,从上往下的流式排列.并最终窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素.脱离文档流即是元素打乱了这个排列,或是从排版 ...

  3. 如何修改SharePoint2013服务器场帐号密码

    服务器远程登录帐号密码修改密码后,如何修改sharepoint服务器场管理员账户密码,今天登录了一下N久以前的搭建sharepoint2013服务器场的一台服务器器,登录进去以后直接提示帐号密码过期需 ...

  4. Python Day19

    Django Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Sessio ...

  5. Redis Cluster

    使用 Redis Cluster Redis 3.0 在2015年出了Stable版本,3.0版本相对于2.8版本带来的主要新特性包括: 实现了Redis Cluster,从而做到了对集群的支持: 引 ...

  6. Xshell5 里桌面显示数据调大!!!

    今天告诉大家一个好用的技巧, 在Xshell5下工作,屏幕上很容易积攒数据量,尤其是编译的时候,(当然你编译的时候可以重定向到一个文件中,也可以只重定向编译错误的信息): 这个时候,你想观看之前的编译 ...

  7. FSM(状态机)、HFSM(分层状态机)、BT(行为树)的区别

    游戏人工智能AI中最常听见的就是这三个词拉: FSM 这个不用说拉,百度一大堆解释, 简单将就是将游戏AI行为分为一个一个的状态,状态与状态之间的过渡通过事件的触发来形成. 比如士兵的行为有“巡逻”, ...

  8. LODProp3D实例

    1. Level of detail(LoD)多细节层次描述(简称LoD)是实时绘制复杂几何场景的一种有效工具.基于层次结构的动态简化方法能够根据视点的变化,实时连续地转换场景细节模型.在本例中,实现 ...

  9. mvc添加多条数据到数据库

    from : http://www.th7.cn/Program/net/201502/387849.shtml mvc的视图太强大了,个人刚刚接触.(初级菜鸟,懂的不多,往大神们指点)需求是,客户点 ...

  10. [从产品角度学excel 04]-单元格的“衣服”

    忘记发这里了..补发一下 这是<从产品角度学EXCEL>系列——单元格篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 2 EXCEL里的树形结构 3 单元格 ...