用于处理文件上传的简单 HTTP 服务器
项目描述
恩格斯
ngus是一个用纯 Python 编写的极简 HTTP 服务器,用于接收文件上传
动机
编写这个小程序包的原因是需要将文件从运行在高度受限的 VPN 上的 Windows 桌面计算机传输到我的 GNU 和 UNIX 系统。
由于 HTTP 流量(出)不受限制,我开始寻找一个小型但灵活的 HTTP 服务器,它可以满足以下条件:
-
可以在一些 CLI 参数的帮助下进行配置
-
可以由非特权用户快速启动和停止
-
能够接收上传到特定目录
-
可移植且需要最少的依赖项
-
成为 C/C++ 或 Python 生态系统的一部分
令我惊讶的是,我找不到任何符合该标准的免费软件。
概述
ngus的主要目的是接受来自 HTTP 客户端的 POST 请求的文件上传。
目前ngus不提供加密 (HTTPS) 支持。可以使用许多不同的工具来充当 HTTPS 代理。
有关更多详细信息,请参见下面的示例!
安装
点 (pypi)
pip install ngus
琴图
layman -a sgs
emerge www-servers/ngus
例子
如上所述安装ngus时,除了ngus Python 模块之外,还将安装一个专用的ngus脚本(入口点)。
跑步:
ngus -h
出于所有实际目的,将与运行相同:
python -m ngus -h
后一种格式将用于本节的其余部分。
python -m ngus -H 0.0.0.0 -p 8080
将启动服务器,在所有可用接口上绑定端口 8080 并将接收到的上传存储在当前工作目录(CWD)中,同时
python -m ngus -H 0.0.0.0 -p 8080 -u /home/s/uploads
将它们存储在/home/s/uploads
注意:这将允许ngus替换此目录中的任何现有文件。
一旦服务器运行,客户端将能够发送带有文件数据的 POST 表单。人们始终可以使用常规浏览器访问 URL(发送 GET 请求)并使用提供的表单,或者简单地使用curl之类的客户端来发布(发送 POST 请求)表单。
curl -F "ufile=@myfile.zip" http://158.39.125.240:8080
默认的表单输入字段名称是ufile。这可以通过使用 --input-name参数进行更改。可以使用 --basic-auth参数添加基本身份验证支持。
python -m ngus -H 0.0.0.0 -p 8080 -i uploadfile -b "uname:foo" -u /home/s/uploads
curl --basic -u uname -F "uploadfile=@myfile.zip" http://158.39.125.240:8080
使用nginx作为代理
ngus通常不会在端口 80 (HTTP) 和 443 (HTTPS) 上运行,因为绑定它们需要管理员 (root) 权限。
在非特权端口 (> 1024) 上运行ngus可能无法解决上述问题。即,由于强加的防火墙/VPN 限制,潜在客户端可能无法与 80 和 443 以外的端口进行通信。
当ngus在不可公开访问的主机上运行时,会出现另一个潜在挑战。
nginx可用于将流量代理到上面示例中所述运行的ngus实例。
server {
listen 443 ssl;
listen 80;
server_name uploads.myhostname.net;
access_log /var/log/nginx/uploads.myhostname.net.access.log;
error_log /var/log/nginx/uploads.myhostname.net.error.log error;
ssl_certificate uploads.myhostname.net.cert.pem;
ssl_certificate_key uploads.myhostname.net.key.pem;
location / {
# point at the ngus instance running on a private network address
proxy_pass http://192.168.1.240:8080/;
}
}
...然后上传一个文件:
curl -F "ufile=@myfile.zip" https://uploads.myhostname.net
支持和贡献
ngus 托管在 GitHub 上:https ://github.com/blackm0re/ngus
作者
Simeon Simeonov - sgs @ LiberaChat
执照
版权所有 (c) 2021,Simeon Simeonov 保留所有权利。
根据 GNU 通用公共许可证 v3.0 或更高版本获得许可。SPDX 许可证标识符:GPL-3.0 或更高版本
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。