使用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计算牛顿迭代多项式实例分析
May 07 Python
Python的re模块正则表达式操作
May 25 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
使用Python的package机制如何简化utils包设计详解
Dec 11 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
Pandas标记删除重复记录的方法
Apr 08 Python
python代码过长的换行方法
Jul 19 Python
python3 unicode列表转换为中文的实例
Oct 26 Python
对pandas的行列名更改与数据选择详解
Nov 12 Python
用python求一重积分和二重积分的例子
Dec 06 Python
python实现扫雷游戏
Mar 03 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 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
谈一谈收音机的高放电路
2021/03/02 无线电
杏林同学录(六)
2006/10/09 PHP
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
基于jquery的无刷新分页技术
2011/06/11 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
Python与Redis的连接教程
2015/04/22 Python
python实现八大排序算法(1)
2017/09/14 Python
Python操作Sql Server 2008数据库的方法详解
2018/05/17 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
Python进程间通信Queue消息队列用法分析
2019/05/22 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
美国批发供应商:Kole Imports
2019/04/10 全球购物
项目经理岗位职责
2013/11/11 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
python如何做代码性能分析
2021/04/26 Python