Skip to main content

用于处理文件上传的简单 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 或更高版本

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

ngus-1.0.tar.gz (29.3 kB 查看哈希

已上传 source

内置分布

ngus-1.0-py3-none-any.whl (31.4 kB 查看哈希

已上传 py3