使用Python创建简单的HTTP服务器的方法步骤


Posted in Python onApril 26, 2019

如果需要一个简单的Web Server,而不是安装那些复杂的HTTP服务程序,比如:Apache,Nginx等。那么可以使用Python自带的包完成一个简单的内建 HTTP 服务器。于是,你可以把你的目录和文件都以HTTP的方式展示出来。

基本命令

python -m Web服务器模块 [端口号,默认8000]

这里的“Web服务器模块”有如下三种:

BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler。

SimpleHTTPServer: 包含执行GET和HEAD请求的SimpleHTTPRequestHandler类。

CGIHTTPServer: 包含处理POST请求和执行CGIHTTPRequestHandler类。

启动web服务器

对于Python2,简单搭建Web服务器,只需在需要搭建Web服务器的目录(如 /home/pythontab/)下,输入如下命令:

python -m SimpleHTTPServer 8080
使用 8080端口的创建Web服务器

对于Python3,其创建Web服务器的等价命令,如下:

python3 -m http.server 8080

浏览web页面

可以在浏览器中输入 http://127.0.0.1:8080 或 将 http://localhost:8080进行访问。其他机器也可以通过服务器的IP地址来访问服务器资源。

如果当前文件夹有index.html文件,会默认显示该文件,否则,会以文件列表的形式显示目录下所有文件。这样已经实现了最基本的文件分享的目的,你可以做成一个脚本,再建立一个快捷方式,就可以很方便的启动文件分享了。如果有更多需求,完全可以根据自己需要定制,具体的请参见官方文档SimpleHTTPServer,或者直接看源码。我拷贝一段,方便参考:

import SimpleHTTPServer
import SocketServer

PORT = 8000

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()

Python版FTP服务器

看到这里,默认你已经安装了Python,不过你还需要安装另外一个好用的工具。你知道,当需要找Chrome插件的时候,会去Google的WebStore;当需要找Firefox应用的时候,会去Mozilla的Add-ons;当你需要找Python组件的时候,你需要pip:A tool for installing and managing Python packages,安装方法就不介绍了。

Python没有内置一个直接可以用的FTP服务器,所以需要第三方组件的支持,我找到的这个组件叫pyftpdlib,首先安装:

pip install pyftpdlib

安装完后,和HTTP服器类似,执行以下命令就可以启动一个FTP服务器了:

python -m pyftpdlib -p 21

后面的21端口依然是可选的,不填会随机一个,被占用的端口将跳过。在浏览器敲入本机地址:
ftp://localhost:21

这时候,是匿名访问,也就是用户名是anonymous,密码为空,如果想要控制访问权限,你需要自己定制服务器,具体的可以参看pyftpdlib Tutorial,我这里拷贝过来一段作为介绍:

from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer

def main():
  # Instantiate a dummy authorizer for managing 'virtual' users
  authorizer = DummyAuthorizer()

  # Define a new user having full r/w permissions and a read-only
  # anonymous user
  authorizer.add_user('user', '12345', '.', perm='elradfmwM')
  authorizer.add_anonymous(os.getcwd())

  # Instantiate FTP handler class
  handler = FTPHandler
  handler.authorizer = authorizer

  # Define a customized banner (string returned when client connects)
  handler.banner = "pyftpdlib based ftpd ready."

  # Specify a masquerade address and the range of ports to use for
  # passive connections. Decomment in case you're behind a NAT.
  #handler.masquerade_address = '151.25.42.11'
  #handler.passive_ports = range(60000, 65535)

  # Instantiate FTP server class and listen on 0.0.0.0:2121
  address = ('', 2121)
  server = FTPServer(address, handler)

  # set a limit for connections
  server.max_cons = 256
  server.max_cons_per_ip = 5

  # start ftp server
  server.serve_forever()

if __name__ == '__main__':
  main()

只看代码应该基本知道该怎么用了,add_user显然是添加用户,2121是指定端口,当然也可以随机,还有最大连接数max_cons,每个ip最大连接限制,更多的接口建议直接看docstrings。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
零基础写python爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
python使用正则表达式提取网页URL的方法
May 26 Python
python的构建工具setup.py的方法使用示例
Oct 23 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
Python学习小技巧总结
Jun 10 Python
python实现京东秒杀功能
Jul 30 Python
在windows下使用python进行串口通讯的方法
Jul 02 Python
python实现的汉诺塔算法示例
Oct 23 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
Jan 15 Python
用Python生成HTML表格的方法示例
Mar 06 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
May 26 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
Python3.5内置模块之random模块用法实例分析
Apr 26 #Python
python3.5安装python3-tk详解
Apr 26 #Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 #Python
python实现名片管理系统项目
Apr 26 #Python
python面向对象实现名片管理系统文件版
Apr 26 #Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 #Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 #Python
You might like
php选择排序法实现数组排序实例分析
2015/02/16 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
网页的标准,IMG不支持onload标签怎么办
2006/06/29 Javascript
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
js滚动条回到顶部的代码
2011/12/06 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
详解vue父子模版嵌套案例
2017/03/04 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
python杀死一个线程的方法
2015/09/06 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
python中的colorlog库使用详解
2019/07/05 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
2013年学期结束动员演讲稿
2014/01/07 职场文书
小学国庆节活动方案
2014/02/11 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
婚礼秀策划方案
2014/05/19 职场文书
主题班会演讲稿
2014/05/22 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
小学一年级班主任工作经验交流材料
2015/11/02 职场文书