使用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使用xlrd模块操作Excel数据导入的方法
May 26 Python
基于wxpython开发的简单gui计算器实例
May 30 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
Python中类型检查的详细介绍
Feb 13 Python
Python中函数参数调用方式分析
Aug 09 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
详解python配置虚拟环境
Apr 08 Python
python游戏开发之视频转彩色字符动画
Apr 26 Python
python实现桌面托盘气泡提示
Jul 29 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
Jul 09 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 Python
python自动化八大定位元素讲解
Jul 09 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实现的MySQL数据浏览器
2007/03/11 PHP
探讨捕获php错误信息方法的详解
2013/06/09 PHP
PHP连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
Yii rules常用规则示例
2016/03/15 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
原生JS绑定滑轮滚动事件兼容常见浏览器
2014/06/30 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
jquery插件jquery.LightBox.js实现点击放大图片并左右点击切换效果(附demo源码下载)
2016/02/25 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
JS中async/await实现异步调用的方法
2019/08/28 Javascript
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
pytorch中的inference使用实例
2020/02/20 Python
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
实习协议书范本
2014/04/22 职场文书
上海世博会口号
2014/06/19 职场文书
2015年安全生产责任书
2015/01/30 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
交通安全教育心得体会
2016/01/15 职场文书