使用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语言编写电脑时间自动同步小工具
Mar 08 Python
python求素数示例分享
Feb 16 Python
使用Python的Flask框架实现视频的流媒体传输
Mar 31 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
python顺序的读取文件夹下名称有序的文件方法
Jul 11 Python
深入flask之异步非堵塞实现代码示例
Jul 31 Python
Python 面试中 8 个必考问题
Nov 16 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
pyspark给dataframe增加新的一列的实现示例
Apr 24 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
python collections模块的使用
Oct 16 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 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读取超大文件的实例代码
2012/04/01 PHP
PHP中each与list用法分析
2016/01/08 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
JavaScript中的其他对象
2008/01/16 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
深入分析在Python模块顶层运行的代码引起的一个Bug
2014/07/04 Python
Flask-Mail用法实例分析
2018/07/21 Python
python实现键盘输入的实操方法
2019/07/16 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
ktv周年庆活动方案
2014/08/18 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
企业愿景口号
2015/12/25 职场文书
2016教师校本研修心得体会
2016/01/08 职场文书
物业管理交接协议书
2016/03/24 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
Python机器学习之决策树和随机森林
2021/07/15 Javascript
sql server 累计求和实现代码
2022/02/28 SQL Server