有时候需要临时启动要给Web服务,用于临时访问或者提供文件共享等为此虫虫给大家整理了一下常见的单行命令启动一个Web服务的总结下面的单行命令,中的每一个都会在当前(或指定的)目录中运行一个临时http Web服务器,监听8000端口,各个语言版本基本上都已经覆盖了,如有遗漏请留言告知,下面我们就来聊聊关于skylineweb开发教程?接下来我们就一起去了解一下吧!
skylineweb开发教程
有时候需要临时启动要给Web服务,用于临时访问或者提供文件共享等。为此虫虫给大家整理了一下常见的单行命令启动一个Web服务的总结。下面的单行命令,中的每一个都会在当前(或指定的)目录中运行一个临时http Web服务器,监听8000端口,各个语言版本基本上都已经覆盖了,如有遗漏请留言告知。
docker版本先来一个基于容器的,这是一个真正容器版本的Apache服务器,基础镜像包为httpd:2.4-alpine:
docker run -d -p 8000:80 --name CC-web -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4-alpine
默认就是当前文件夹的列表页面,启动时候注意安全哦。
pythonPython 2和3版本差异较大,其内置的http服务亦有所差异。
2.x版本:
python -m Simplehttperver 8000
3.x版本:
python -m http.server 8000
除了语言自带模块,还有大量的第三方模块也可以支持。
twisted (Python应用)
twisted -n web -p 8000 --path .
或者:
python -c 'from twisted.web.server import Site; from twisted.web.static import File; from twisted.internet import reactor; reactor.listenTCP(8000, Site(File("."))); reactor.run()'
ruby -rwebrick -e'WEBrick::httperver.new(:Port => 8000, :DocumentRoot => Dir.pwd).start'
同样Ruby也有第三方http模块可以支持。
adsf(Ruby应用):
gem install adsf
adsf -p 8000
gem install sinatra
ruby -rsinatra -e'set :public_folder, "."; set :port, 8000'
cpan HTTP::Server::Brick
perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8000); $s->mount("/"=>{path=>"."}); $s->start'
cpan Plack
plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000
cpan Mojolicious::Lite
perl -MMojolicious::Lite -MCwd -e 'app->static->paths->[0]=getcwd; app->start' daemon -l http://*:8000
npm install -g http-server
http-server -p 8000
npm install -g node-static
static -p 8000
PHP在大于5.4的版本中内置了http服务,可以直接用-S选项启动。
php -S 127.0.0.1:8000
Erlang语言实现比较麻烦一点,但是也能在单行中实现。
erl -s inets -eval 'inets:start(httpd,[{server_name,"NAME"},{document_root, "."},{server_root, "."},{port, 8000},{mime_types,[{"html","text/html"},{"htm","text/html"},{"js","text/javascript"},{"css","text/css"},{"gif","image/gif"},{"jpg","image/jpeg"},{"jpeg","image/jpeg"},{"png","image/png"}]}]).'
Golang语言无法直接用一句话实现,需要自己写个main或者用第三方的模块。
main.go
import "net/http"
fuNC main() {
http.ListenAndServe(":8000", http.FileServer(http.Dir(".")))
}
然后启动即可,也非常简单,但是性能很好。
go run main.go
可以用golang应用,比如caddy,它支持的功能就比较强大了,但是可以简单化使用。
caddy
yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy
caddy -port 8000
Rust语言需要用http模块,由于Rust核心模块中几乎不带任何应用模块,需要先用cargo安装:
cargo install http
然后直接就可以启动。
http
R语言下也很简单,用自带的servr服务器模块就可以。Serve是R语言与其他语言的通信(TCP/IP)接口,客户端由多种语言实现,像C/C , Java等。
Rscript -e 'servr::httd()' -p8000
dart语言自带dhttpd可以实现:
pub global activate dhttpd
[if not in PATH: pub global run] dhttpd
使用http/server和eval语言启动:
crystal eval 'require "http/server"; HTTP::Server.new([HTTP::StaticFileHandler.new(".")]).listen(8000)'
oCaml语言需要用cohttp和async模块实现:
opam install cohttp async
cohttp-server-async
或者cohttp,lwt和ssl模块也可以。
opam install cohttp lwt ssl
cohttp-server-lwt
Tcl语言需要版本8.6 ,Tcllib 1.19 更新版本才能支持,实现也较麻烦:
echo 'package require httpd 4; ::httpd::server create HTTPD port 8000 myaddr 127.0.0.1 doc_root [pwd]; vwait forever' | tclsh
Java语言基本上就是可以算是不支持,但是在JDK 1.7以上版本可以用折衷办法,而且只支持一个用户登陆,不能算是这个合格的Web服务。
echo -e 'import java.net.*;import java.nio.file.*;public class M{public static void main(String[] args)throws Exception{byte[]b=new byte[16777215];ServerSocket s=new ServerSocket(8000);for(;;)try{Socket c=s.accept();c.getInputStream().read(b);c.getOutputStream().write(("HTTP/1.1 200 OK\\r\\n\\r\\n" new String(Files.readAllBytes(Paths.get(new String(b).split(" ")[1].substring(1))))).getBytes());c.getOutputStream().flush();c.close();}catch(Exception e){}}}'>M.java;javac M.java;java M
dotnet core用户可以用dotnet-serve模块,先安装:
dotnet tool install --global dotnet-serve
dotnet serve -p 8000
C语言写的Web服务器,可以用webfs:
webfsd -F -p 8000
汇编语言的版本的asmttpd(github/nemasu/asmttpd),之前文章中提到过,这可能最小版本的Web服务器了,大小只有6k,不过麻雀虽小功能很全,支持多线程,多文档种类,多Http状态和头支持。
asmttpd . 8000
IIS命令也强行凑一波热闹:
C:\> "C:\Program Files (x86)\IIS Express\iisexpress.exe" /path:C:\MyWeb /port:8000
Oneline应用怎么能少得了awk呢?虽然比较麻烦:
gawk '@load"filefuncs";@load"readfile";func send(s,e,d,t,b){print"HTTP/1.0 "s" "e|&S;print"Content-Length: "b|&S;print"Content-Type: "t|&S;print d|&S;close(S);}func cf(x){split(x,y,"/");for(z in y){print "FOUND "y[z];if(y[z]==".."){return 0;}}return 1;}func mt(f){c="file -b --mime-type "f;r="";while((c|getline z)>0){r=r z;}close(c);return r;}BEGIN{if(ARGV[1]!=""){if(chdir(ARGV[1])){print "Failed to chdir to "ARGV[1];exit;}ARGC=1;}RS=ORS="\r\n";while(1){S="/inet/tcp/8080/0/0";while((S|&getline l)>0){split(l,f," ");if(f[1]=="GET"){p=substr(f[2],2)}if(p==""){p="index.html"}stat(p,s);if(cf(p)&&s["type"]=="file"){m=mt(p);o=readfile(p);send(200,"OK",o,m,s["size"]);break;}n="<html>Not Found</html>";send(404,"Not Found",n,"text/html"RS,length(n));break;}}}'
PowerShell表示虽然只是路过,但是不愿意错过。
Hso=New-Object Net.HttpListener;$Hso.Prefixes.Add("http:// :8000/");$Hso.Start();While ($Hso.IsListening){$HC=$Hso.GetContext();$HRes=$HC.Response;$HRes.Headers.Add("Content-Type","text/plain");$Buf=[Text.Encoding]::UTF8.GetBytes((GC (Join-Path $Pwd ($HC.Request).RawUrl)));$HRes.ContentLength64=$Buf.Length;$HRes.OutputStream.Write($Buf,0,$Buf.Length);$HRes.Close()};$Hso.Stop()
Cmd表示借助孙子PS的魔法,我也可以,虽然啥也看不懂:
PowerShell.exe -nop -enc JABIAHMAbwA9AE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAEgAdAB0AHAATABpAHMAdABlAG4AZQByADsAJABIAHMAbwAuAFAAcgBlAGYAaQB4AGUAcwAuAEEAZABkACgAIgBoAHQAdABwADoALwAvACsAOgA4ADAAMAAwAC8AIgApADsAJABIAHMAbwAuAFMAdABhAHIAdAAoACkAOwBXAGgAaQBsAGUAIAAoACQASABzAG8ALgBJAHMATABpAHMAdABlAG4AaQBuAGcAKQB7ACQASABDAD0AJABIAHMAbwAuAEcAZQB0AEMAbwBuAHQAZQB4AHQAKAApADsAJABIAFIAZQBzAD0AJABIAEMALgBSAGUAcwBwAG8AbgBzAGUAOwAkAEgAUgBlAHMALgBIAGUAYQBkAGUAcgBzAC4AQQBkAGQAKAAiAEMAbwBuAHQAZQBuAHQALQBUAHkAcABlACIALAAiAHQAZQB4AHQALwBwAGwAYQBpAG4AIgApADsAJABCAHUAZgA9AFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAQgB5AHQAZQBzACgAKABHAEMAIAAoAEoAbwBpAG4ALQBQAGEAdABoACAAJABQAHcAZAAgACgAJABIAEMALgBSAGUAcQB1AGUAcwB0ACkALgBSAGEAdwBVAHIAbAApACkAKQA7ACQASABSAGUAcwAuAEMAbwBuAHQAZQBuAHQATABlAG4AZwB0AGgANgA0AD0AJABCAHUAZgAuAEwAZQBuAGcAdABoADsAJABIAFIAZQBzAC4ATwB1AHQAcAB1AHQAUwB0AHIAZQBhAG0ALgBXAHIAaQB0AGUAKAAkAEIAdQBmACwAMAAsACQAQgB1AGYALgBMAGUAbgBnAHQAaAApADsAJABIAFIAZQBzAC4AQwBsAG8AcwBlACgAKQB9ADsAJABIAHMAbwAuAFMAdABvAHAAKAApAA==
NC表示我是网络界的瑞士军刀:
while true ; do nc -l 8080 < test.html ; done
busybox表示,咋啥也不说直接上代码就OK
busybox httpd -f -p 8000