简单的命令行 HTTP 服务器

Cid*_*Cid 177 command-line webserver html http

我有一个脚本可以生成一份每日报告,我想为所谓的公众服务。问题是我不想增加我对 HTTP 服务器(例如 Apache)的所有配置和安全影响的头痛维护。

有没有一个简单的解决方案来提供一个小的 HTML 页面,而无需配置一个完整的 HTTP 服务器?

Oli*_*nde 230

尝试SimpleHTTPServer

python -m SimpleHTTPServer
# or the Python 3 equivalent
python3 -m http.server
Run Code Online (Sandbox Code Playgroud)

它应该会在http://0.0.0.0:8000处提供CWD(例如 index.html)中的任何内容。

  • 您可以选择指定这样的端口号:`python3 -m http.server 1337`。据我所知,您无法指定要绑定到哪个 IP。注意:要侦听端口 80,您必须具有 root 权限,例如:`sudo python3 -m http.server 80` (17认同)
  • 要将默认侦听端口 8080(使用 python2)更改为其他端口,只需在以下位置添加端口号:`python -m SimpleHTTPServer 3000` (2认同)

Evg*_*gin 67

有一个很大的 http 静态服务器单行列表

要进入此列表,解决方案必须:

  1. 使用当前目录(或指定目录)作为服务器根目录提供静态文件
  2. 能够使用单个单行命令运行(如果它们是一次性的,则依赖项很好)
  3. 使用适当的 mime 类型提供基本文件类型(html、css、js、图像),除了命令本身(没有特定于框架的服务器等)不需要配置(来自文件或其他)
  4. 必须在前台运行,或者有一个可以运行的模式(即没有守护进程)

例如:


Nik*_*ley 53

使用node.js,快速,轻便。

或者

只需使用简单的ncnetcat 命令在端口上启动一个快速的网络服务器,并提供包括服务器响应头在内的文件内容。

来自维基百科的参考:

http://en.wikipedia.org/wiki/Netcat#Setting_up_a_one-shot_webserver_on_port_8080_to_present_the_content_of_a_file

{ echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat some.file; } | nc -l -p 8080
{ echo -ne "HTTP/1.0 200 OK\r\nContent-Length: $(wc -c <some.file)\r\n\r\n"; cat some.file; } | nc -l -p 8080
Run Code Online (Sandbox Code Playgroud)

  • 仅运行交互式 shell 的裸 node.js 进程需要 15MB(共享 7.5)的 RAM。然后你必须在其中运行 HTTP 服务器。有趣的是,人们认为它是轻量级的。;-) (37认同)
  • +1 基于`nc` 的解决方案:)。请注意,`echo` 的 `-ne` 标志可能不可移植,使用 [`printf`](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html) 命令可能是一个更好的选择。 (12认同)
  • 如果您将 node 与 Apache 进行比较,您当然是对的,但我发现有趣的是 node 与 http://cr.yp.to/publicfile.html 或类似的东西相比时的外观。:) (2认同)
  • 除非您使用第二个 nc 命令,否则 Chrome 不会停止跳动。此外,并非两个 nc 命令 show 都会在响应后退出。您可以使用以下命令继续重新启动它:`while :; do { echo -ne "HTTP/1.0 200 OK\r\n内容长度: $(wc -c &lt;some.file)\r\n\r\n"; 猫一些.文件;} | 数控-l-p 8080; 完成`。使用 ctrl+z 使其进入睡眠状态。 (2认同)

Ale*_*der 41

是的,网络。

可以在这里找到:nweb.c

(以前在ibm.com 上

编译 nweb.c:

gcc -O -DLINUX nweb.c -o nweb
Run Code Online (Sandbox Code Playgroud)


man*_*ork 38

从 5.4.0 版本开始,PHP 也有一个内置的 web 服务器

php -S localhost:8000
Run Code Online (Sandbox Code Playgroud)

您可以使用 指定 Web 服务器的文档目录-t,例如:

php -S localhost:8000 -t /var/lib/www
Run Code Online (Sandbox Code Playgroud)

如果您希望能够通过网络访问服务器,则:

php -S 0.0.0.0:8000 -t /var/lib/www
Run Code Online (Sandbox Code Playgroud)

  • 哇,这很容易而且很有帮助! (2认同)

ash*_*999 19

Node 有一个简单、快速、轻量级的 HTTP 服务器模块。安装:

sudo npm install http-server -g
Run Code Online (Sandbox Code Playgroud)

(假设您已经安装node并且npm已经安装。)

要运行它,请使用当前目录作为网站根目录:

http-server
Run Code Online (Sandbox Code Playgroud)

这将在 上创建一个服务器http://0.0.0.0:8080/

  • 首先我尝试了“`python3 -m http.server`”,但它是单线程的,一次只能下载一个客户端,其他的需要等待。由于 Node.js 的异步特性,这个使用 Node.js 的解决方案效果更好。如果您想与多人共享文件,请使用此选项。 (3认同)

Vij*_*jay 8

对稍微不公平(恕我直言)被否决的答案进行简单的修复/增强也可能有效。让我们先设置 html 文件......

echo '<html><head><title>My Test File</title></head><body><h1>OK!</h1></body></html>' > my_file.html
Run Code Online (Sandbox Code Playgroud)

(感谢 Steve Folly 发现了我在上面 HTML 中的拼写错误。已修复。)

现在你可以用这一行来提供它:

while true; do echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" | cat - my_file.html  | nc -l -p 8080; done
Run Code Online (Sandbox Code Playgroud)

这个基本想法适用于其他可能通过其他cat或子壳想法对您有用的技巧,例如:

while true; do echo -e "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nI think the date is $(date), Have a good day!" | nc -l -p 8080; done
Run Code Online (Sandbox Code Playgroud)


Arc*_*ege 6

尝试SimpleHTTPServer在 Python 中使用。

mkdir ~/public_html
command_to_generate_output > ~/public_html/output.txt

(cd ~/public_html; python -c 'import SimpleHTTPServer,BaseHTTPServer; BaseHTTPServer.HTTPServer(("", 8080), SimpleHTTPServer.SimpleHTTPRequestHandler).serve_forever()')
Run Code Online (Sandbox Code Playgroud)

前两行是为 Web 服务器设置的。最后一行创建了一个简单的 Web 服务器,在端口 8080 上打开,该服务器仅提供来自~/public_html. 如果该目录中只有一个文件,则仅公开该文件:http://localhost:8080/output.txt.


Tra*_*der 6

简单的 Ruby one liner 为目录提供服务:

ruby -run -e httpd . -p 8080
Run Code Online (Sandbox Code Playgroud)