百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Oneline单行Web服务,各个编程语言都有

toyiye 2024-09-03 01:10 5 浏览 0 评论

有时候需要临时启动要给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 SimpleHTTPServer 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::HTTPServer.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语言需要用https模块,由于Rust核心模块中几乎不带任何应用模块,需要先用cargo安装:

cargo install https

然后直接就可以启动。

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

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码