用python或者perl實現簡單的http伺服器目錄共享

JoyerHuang_悅發表於2010-11-21

 

由於執行不了Go語言的一個例子工程,區區把golang的原始碼更新到最新版本了。。

/README寫著:

 

 


This is the source code repository for the Go programming language.

For documentation about how to install and use Go,
visit http://golang.org/ or load doc/install.html in your web browser.


 

 

可混的是平時都在vm+ssh中使用linux,所以只好將golang目錄做成web server再用host機器的火狐看文件了。

 

“把一個目錄用http伺服器的方式臨時釋出”,這是一個很好用的技術需求。

 

在較新python安裝中,只需一行命令即可解決:

python -m SimpleHTTPServer 8080
這個命令可以把當前目錄變成一個小型的web server。傳檔案,看文件,試指令碼都很實用。

在瀏覽器中再輸入http://localhost:8080就可以檢視了。。

 

BUT,這裡要說說區區的特殊情況,由於使用了virtual box的NAT功能,本人要輸入的是http://localhost:3388 —— 這是由於開啟的埠對映將vm的8080仿成host的3388了。

 

本來事情可以告一段落,但是今天忽然覺得這個SimpleHTTPServer好慢好卡,所以決定找找perl有沒有類似的實現(這就是所謂蛋疼)。

google說http://www.perlmonks.org/?node_id=865148 這裡有不錯的方案,

baidu說………………不知道它說什麼。

 

最終比較靠譜的方案是用HTTP::Server::Brick,這個在linux下非常簡單用

sudo cpan -i HTTP::Server::Brick

就可以完成安裝了。。

 

然後終於perl也有oneline http server了:

perl -MHTTP::Server::Brick -e 'my $p=`pwd`;chop $p;my $s=HTTP::Server::Brick->new(port=>8080);$s->mount("/" => {path=>$p}); $s->start()'

 

BUT again,這裡要說說區區的特殊情況,由於使用了virtual box的NAT功能,.......

 

所以瀏覽http目錄時,會有一個redirect的bug,解決方法是:

把Brick.pm的這一行:

$res->add_content("<a href=/"$_/">$_</a>/n") for map { s!.*/!!; $_} sort glob "$path/*";

改成:

$res->add_content("<a href=/"$_/">$_</a>/n") for map {my $p=$_; my $t=$_; $t=~s!.*/!!; (-d $p) ? $t."/" : $t} sort glob "$path/*";

 

區區在琢磨要不要給作者發個patch,BUT不是大家都需要的。

 

 


 

經本人親測:

perl的這個oneline http server比python的要快很多。

 


 

 

 

 

 

相關文章