【问题标题】:Single Line Python Webserver单行 Python 网络服务器
【发布时间】:2011-12-24 22:04:12
【问题描述】:

我似乎记得几年前看到过网络服务器的单行实现。 我知道 SimpleHTTPServer 类似,但不是这样 - 我认为这是使用 Socket 和 select()。

我以为它在 Python Tutor 邮件列表中,但存档搜索没有发现任何内容,谷歌搜索也没有。我想知道这里是否有人可能有我可以查找的更多线索 - 或者最好是原始链接。

虽然我猜原作者完全有可能因为羞耻而将其撤下……

【问题讨论】:

  • 我也记得这个。在示例中,托管了一个文件。访问服务器后,浏览器会下载文件。

标签: python


【解决方案1】:

我很确定您不能在一行代码中使用套接字和 select() 的网络服务器。即使不使用分号,您也必须有一些循环和控制结构。

你确定这不是你要找的吗?

Python 3 版本:

$ python -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Python 2 版本:python -m SimpleHTTPServer 8000

【讨论】:

  • 循环和控制结构可以替换为生成器、列表推导、映射、过滤器、归约和负载更多,我不会费心列出。
  • 哇,我想你是对的。这应该很有趣。
  • 使用 --bind 和 Python3 命令(仅)将 Web 服务器绑定到除 localhost (0.0.0.0) 以外的 IP 地址。但是,这样做时要小心,因为它会将当前目录的结构暴露给任何可以通过 http 在端口 8000 连接到您的计算机的人。如果您看到未知地址访问服务器,请立即退出。
【解决方案2】:

可能是perlfavourite one liners

perl -MIO::All -e 'io(":8080")->fork->accept->(sub { $_[0] < io(-x $1 ? "./$1 |" : $1) if /^GET \/(.*) / })'

【讨论】:

  • 我收到了这个错误:Use of ?PATTERN? without explicit operator is deprecated at -e line 1. Search pattern not terminated or ternary operator parsed as search pattern at -e line 1. 这是预期的吗?
  • 如果您查看链接“最喜欢的一个衬里”,您可以看到 + 只是一个行继续符。实线应该是perl -MIO::All -e 'io(":8080")-&gt;fork-&gt;accept-&gt;(sub { $_[0] &lt; io(-x $1 ? "./$1 |" : $1) if /^GET \/(.*) / })'
  • 请记住,这很容易受到 /../../../ 黑客的攻击,以逃避当前目录。切勿在主机之外打开它,如果您有多个用户,请小心。
  • 不起作用。我看不到正在显示的任何目录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
相关资源
最近更新 更多