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

作者:zx 时间:2023-07-17 01:33:27 

如果需要一个简单的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。

来源:https://www.pythontab.com/html/2018/pythonhexinbiancheng_0907/1346.html

标签:Python,创建,HTTP服务器
0
投稿

猜你喜欢

  • pandas使用函数批量处理数据(map、apply、applymap)

    2023-03-07 11:12:09
  • Python数据分析与处理(一)--北京高考分数线统计分析

    2022-08-13 02:11:05
  • Sanic框架蓝图用法实例分析

    2022-12-22 16:27:20
  • JavaScript使用HTML5的window.postMessage实现跨域通信例子

    2024-04-10 11:00:41
  • Dreamweaver使用技巧--让css使网页图片半透明

    2010-09-05 21:13:00
  • python基础中的文件对象详解

    2021-10-20 00:22:40
  • 10款最佳Python开发工具推荐,每一款都是神器

    2022-04-13 06:54:13
  • Golang共享变量如何解决问题

    2024-04-26 17:34:09
  • Python 字符串处理特殊空格\\xc2\\xa0\\t\\n Non-breaking space

    2022-03-09 19:20:16
  • 在 CentOS 7 中安装 MySQL 8 的教程详解

    2024-01-17 03:33:56
  • python从入门到实践之字典

    2023-05-11 22:20:17
  • MySQL实现分词搜索(FULLTEXT)的方法

    2024-01-22 17:47:40
  • Python3 使用map()批量的转换数据类型,如str转float的实现

    2023-07-15 10:35:03
  • JavaScript使用正则表达式获取全部分组内容的方法示例

    2023-08-27 13:38:18
  • python3.6生成器yield用法实例分析

    2022-11-22 00:07:05
  • 在Pytorch中简单使用tensorboard

    2021-02-05 11:07:57
  • python中自带的三个装饰器的实现

    2021-10-28 02:31:52
  • Go语言库系列之flag的具体使用

    2024-04-26 17:19:37
  • Python 26进制计算实现方法

    2022-12-09 03:26:36
  • Python的基本语法详解

    2022-10-27 22:38:42
  • asp之家 网络编程 m.aspxhome.com