有时候需要临时启动要给Web服务,用于临时访问或者提供文件共享等为此虫虫给大家整理了一下常见的单行命令启动一个Web服务的总结下面的单行命令,中的每一个都会在当前(或指定的)目录中运行一个临时http Web服务器,监听8000端口,各个语言版本基本上都已经覆盖了,如有遗漏请留言告知,下面我们就来聊聊关于skylineweb开发教程?接下来我们就一起去了解一下吧!

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

默认就是当前文件夹的列表页面,启动时候注意安全哦。

python

Python 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语言

ruby -rwebrick -e'WEBrick::httperver.new(:Port => 8000, :DocumentRoot => Dir.pwd).start'

同样Ruby也有第三方http模块可以支持。

adsf(Ruby应用):

gem install adsf adsf -p 8000

Sinatra (Ruby应用)

gem install sinatra ruby -rsinatra -e'set :public_folder, "."; set :port, 8000'

Perl语言

cpan HTTP::Server::Brick perl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8000); $s->mount("/"=>{path=>"."}); $s->start'

Plack (Perl应用)

cpan Plack plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000

Mojolicious (Perl应用)

cpan Mojolicious::Lite perl -MMojolicious::Lite -MCwd -e 'app->static->paths->[0]=getcwd; app->start' daemon -l http://*:8000

Node.js

npm install -g http-server http-server -p 8000

node-static(Node.js):

npm install -g node-static static -p 8000

PHP

PHP在大于5.4的版本中内置了http服务,可以直接用-S选项启动。

php -S 127.0.0.1:8000

Erlang语言

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

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

Rust语言需要用http模块,由于Rust核心模块中几乎不带任何应用模块,需要先用cargo安装:

cargo install http

然后直接就可以启动。

http

R语言

R语言下也很简单,用自带的servr服务器模块就可以。Serve是R语言与其他语言的通信(TCP/IP)接口,客户端由多种语言实现,像C/C , Java等。

Rscript -e 'servr::httd()' -p8000

dart语言

dart语言自带dhttpd可以实现:

pub global activate dhttpd [if not in PATH: pub global run] dhttpd

Crystal语言

使用http/server和eval语言启动:

crystal eval 'require "http/server"; HTTP::Server.new([HTTP::StaticFileHandler.new(".")]).listen(8000)'

OCaml语言

oCaml语言需要用cohttp和async模块实现:

opam install cohttp async cohttp-server-async

或者cohttp,lwt和ssl模块也可以。

opam install cohttp lwt ssl cohttp-server-lwt

Tcl

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

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

.NET Core

dotnet core用户可以用dotnet-serve模块,先安装:

dotnet tool install --global dotnet-serve dotnet serve -p 8000

C

C语言写的Web服务器,可以用webfs:

webfsd -F -p 8000

汇编

汇编语言的版本的asmttpd(github/nemasu/asmttpd),之前文章中提到过,这可能最小版本的Web服务器了,大小只有6k,不过麻雀虽小功能很全,支持多线程,多文档种类,多Http状态和头支持。

asmttpd . 8000

IIS Express:

IIS命令也强行凑一波热闹:

C:\> "C:\Program Files (x86)\IIS Express\iisexpress.exe" /path:C:\MyWeb /port:8000

Gawk

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

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启动的PowerShell:

Cmd表示借助孙子PS的魔法,我也可以,虽然啥也看不懂:

PowerShell.exe -nop -enc JABIAHMAbwA9AE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAEgAdAB0AHAATABpAHMAdABlAG4AZQByADsAJABIAHMAbwAuAFAAcgBlAGYAaQB4AGUAcwAuAEEAZABkACgAIgBoAHQAdABwADoALwAvACsAOgA4ADAAMAAwAC8AIgApADsAJABIAHMAbwAuAFMAdABhAHIAdAAoACkAOwBXAGgAaQBsAGUAIAAoACQASABzAG8ALgBJAHMATABpAHMAdABlAG4AaQBuAGcAKQB7ACQASABDAD0AJABIAHMAbwAuAEcAZQB0AEMAbwBuAHQAZQB4AHQAKAApADsAJABIAFIAZQBzAD0AJABIAEMALgBSAGUAcwBwAG8AbgBzAGUAOwAkAEgAUgBlAHMALgBIAGUAYQBkAGUAcgBzAC4AQQBkAGQAKAAiAEMAbwBuAHQAZQBuAHQALQBUAHkAcABlACIALAAiAHQAZQB4AHQALwBwAGwAYQBpAG4AIgApADsAJABCAHUAZgA9AFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAQgB5AHQAZQBzACgAKABHAEMAIAAoAEoAbwBpAG4ALQBQAGEAdABoACAAJABQAHcAZAAgACgAJABIAEMALgBSAGUAcQB1AGUAcwB0ACkALgBSAGEAdwBVAHIAbAApACkAKQA7ACQASABSAGUAcwAuAEMAbwBuAHQAZQBuAHQATABlAG4AZwB0AGgANgA0AD0AJABCAHUAZgAuAEwAZQBuAGcAdABoADsAJABIAFIAZQBzAC4ATwB1AHQAcAB1AHQAUwB0AHIAZQBhAG0ALgBXAHIAaQB0AGUAKAAkAEIAdQBmACwAMAAsACQAQgB1AGYALgBMAGUAbgBnAHQAaAApADsAJABIAFIAZQBzAC4AQwBsAG8AcwBlACgAKQB9ADsAJABIAHMAbwAuAFMAdABvAHAAKAApAA==

NC

NC表示我是网络界的瑞士军刀:

while true ; do nc -l 8080 < test.html ; done

busybox

busybox表示,咋啥也不说直接上代码就OK

busybox httpd -f -p 8000