shell2http alternatives and similar packages
Based on the "Other Software" category.
Alternatively, view shell2http alternatives based on common mentions on social networks and blogs.
-
croc
Easily and securely send things from one computer to another :crocodile: :package: -
Seaweed File System
SeaweedFS is a fast distributed storage system for blobs, objects, files, and data lake, for billions of files! Blob store has O(1) disk seek, cloud tiering. Filer supports Cloud Drive, cross-DC active-active replication, Kubernetes, POSIX FUSE mount, S3 API, S3 Gateway, Hadoop, WebDAV, encryption, Erasure Coding. [Moved to: https://github.com/seaweedfs/seaweedfs] -
limetext
Open source API-compatible alternative to the text editor Sublime Text -
Gor
GoReplay is an open-source tool for capturing and replaying live HTTP traffic into a test environment in order to continuously test your system with real data. It can be used to increase confidence in code deployments, configuration changes and infrastructure changes. -
rkt
An App Container runtime that integrates with init systems, is compatible with other container formats like Docker, and supports alternative execution engines like KVM. -
Comcast
Simulating shitty network connections so you can build better systems. -
confd
Manage local application configuration files using templates and data from etcd or consul -
toxiproxy
:alarm_clock: :fire: A TCP proxy to simulate network and system conditions for chaos and resiliency testing -
scc
Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go -
Docker
Notary is a project that allows anyone to have trust over arbitrary collections of data -
Juju
Universal Operator Lifecycle Manager (OLM) for Kubernetes operators, and operators for traditional Linux apps, with declarative integration between operators for automated microservice integration. -
Stack Up
Super simple deployment tool - think of it like 'make' for a network of servers -
blocky
Fast and lightweight DNS proxy as ad-blocker for local network with many features -
Documize
Modern Confluence alternative designed for internal & external docs, built with Go + EmberJS -
GoDNS
A dynamic DNS client tool supports AliDNS, Cloudflare, Google Domains, DNSPod, HE.net & DuckDNS & DreamHost, etc, written in Go. -
peg
Peg, Parsing Expression Grammar, is an implementation of a Packrat parser generator. -
Go Package Store
An app that displays updates for the Go packages in your GOPATH. -
Guora
🖖🏻 A self-hosted Quora like web application written in Go 基于 Golang 类似知乎的私有部署问答应用 包含问答、评论、点赞、管理后台等功能 -
Gokapi
Lightweight selfhosted Firefox Send alternative without public upload. AWS S3 supported. -
mockingjay
Fake server, Consumer Driven Contracts and help with testing performance from one configuration file with zero system dependencies and no coding whatsoever -
ipe
An open source Pusher server implementation compatible with Pusher client libraries written in GO -
ide
A Go code editor. With debugging and Autocomplete. 一个 Go 代码编辑器,具有 DEBUGGING 和 AUTOCOMPLETE -
tcpprobe
Modern TCP tool and service for network performance observability.
Clean code begins in your IDE with SonarLint
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of shell2http or a related project?
README
shell2http
HTTP-server to execute shell commands. Designed for development, prototyping or remote control. Settings through two command line arguments, path and shell command. By default bind to :8080.
Usage
shell2http [options] /path "shell command" /path2 "shell command2" ...
options:
-host="host" : host IP for http server (default bind to all interfaces)
-port=NNNN : port for http server, 0 - to receive a random port (default 8080)
-form : parse query into environment vars, handle uploaded files
-cgi : run scripts in CGI-mode:
- set environment variables with HTTP-request information
- write POST|PUT|PATCH-data to script STDIN (if is not set -form)
- parse headers from script (eg: "Location: URL\n\n")
-export-vars=var : export environment vars ("VAR1,VAR2,...")
by default export PATH, HOME, LANG, USER, TMPDIR
-export-all-vars : export all current environment vars
-no-index : don't generate index page
-add-exit : add /exit command
-log=filename : log filename, default - STDOUT
-shell="shell" : shell for execute command, "" - without shell (default "sh")
-cache=N : caching command out for N seconds
-one-thread : run each shell command in one thread
-show-errors : show the standard output even if the command exits with a non-zero exit code
-include-stderr : include stderr to output (default is stdout only)
-cert=cert.pem : SSL certificate path (if specified -cert/-key options - run https server)
-key=key.pem : SSL private key path
-basic-auth="" : setup HTTP Basic Authentication ("user_name:password"), can be used several times
-timeout=N : set timeout for execute shell command (in seconds)
-no-log-timestamp : log output without timestamps
-version
-help
In the -form
mode, variables are available for shell scripts:
- $v_NNN -- data from query parameter with name "NNN" (example:
http://localhost:8080/path?NNN=123
) - $filepath_ID -- uploaded file path, ID - id from
<input type=file name=ID>
, temporary uploaded file will be automatically deleted - $filename_ID -- uploaded file name from browser
To setup multiple auth users, you can specify the -basic-auth
option multiple times.
The credentials for basic authentication may also be provided via the SH_BASIC_AUTH
environment variable.
You can specify the preferred HTTP-method (via METHOD:
prefix for path): shell2http GET:/date date
Install
MacOS:
brew tap msoap/tools
brew install shell2http
# update:
brew upgrade shell2http
Using snap (Ubuntu or any Linux distribution with snap):
# install stable version:
sudo snap install shell2http
# install the latest version:
sudo snap install --edge shell2http
# update
sudo snap refresh shell2http
Notice: the snap-package has its own sandbox with the /bin
, /usr/bin
directories which are not equal to system-wide PATH
directories.
Download binaries from: releases (OS X/Linux/Windows/RaspberryPi)
For Docker users, availeble tags see in Docker Hub:
docker pull msoap/shell2http
Build from source (minimum Go version is 1.12):
go install github.com/msoap/[email protected]
# set link to your PATH if needed:
ln -s $(go env GOPATH)/bin/shell2http ~/bin/shell2http
Examples
shell2http /top "top -l 1 | head -10"
shell2http /date date /ps "ps aux"
shell2http -export-all-vars /env 'printenv | sort' /env/path 'echo $PATH' /env/gopath 'echo $GOPATH'
shell2http -export-all-vars /shell_vars_json 'perl -MJSON -E "say to_json(\%ENV)"'
shell2http -export-vars=GOPATH /get 'echo $GOPATH'
HTML calendar for current year
shell2http /cal_html 'echo "<html><body><h1>Calendar</h1>Date: <b>$(date)</b><br><pre>$(cal $(date +%Y))</pre></body></html>"'
Get URL parameters (http://localhost:8080/form?from=10&to=100)
shell2http -form /form 'echo $v_from, $v_to'
CGI scripts
shell2http -cgi /user_agent 'echo $HTTP_USER_AGENT'
shell2http -cgi /set 'touch file; echo "Location: /another_path\n"' # redirect
shell2http -cgi /404 'echo "Status: 404"; echo; echo "404 page"' # custom HTTP code
Upload file
shell2http -form \
GET:/form 'echo "<html><body><form method=POST action=/file enctype=multipart/form-data><input type=file name=uplfile><input type=submit></form>"' \
POST:/file 'cat $filepath_uplfile > uploaded_file.dat; echo Ok'
Testing upload file with curl:
curl -i -F [email protected]/file/path 'http://localhost:8080/file'
Simple http-proxy server (for logging all URLs) Setup proxy as "http://localhost:8080/"
shell2http -log=/dev/null -cgi / 'echo $REQUEST_URI 1>&2; [ "$REQUEST_METHOD" == "POST" ] && post_param="[email protected]"; curl -sL $post_param "$REQUEST_URI" -A "$HTTP_USER_AGENT"'
Test slow connection (http://localhost:8080/slow?duration=10)
shell2http -form /slow 'sleep ${v_duration:-1}; echo "sleep ${v_duration:-1} seconds"'
Proxy with cache in files (for debug with production API with rate limit)
get http://api.url/
as http://localhost:8080/get?url=http://api.url/
shell2http -form \
/form 'echo "<html><form action=/get>URL: <input name=url><input type=submit>"' \
/get 'MD5=$(printf "%s" $v_url | md5); cat cache_$MD5 || (curl -sL $v_url | tee cache_$MD5)'
Remote sound volume control (Mac OS)
shell2http /get 'osascript -e "output volume of (get volume settings)"' \
/up 'osascript -e "set volume output volume (($(osascript -e "output volume of (get volume settings)")+10))"' \
/down 'osascript -e "set volume output volume (($(osascript -e "output volume of (get volume settings)")-10))"'
Remote control for Vox.app player (Mac OS)
shell2http /play_pause 'osascript -e "tell application \"Vox\" to playpause" && echo ok' \
/get_info 'osascript -e "tell application \"Vox\"" -e "\"Artist: \" & artist & \"\n\" & \"Album: \" & album & \"\n\" & \"Track: \" & track" -e "end tell"'
Get four random OS X wallpapers
shell2http /img 'cat "$(ls "/Library/Desktop Pictures/"*.jpg | ruby -e "puts STDIN.readlines.shuffle[0]")"' \
/wallpapers 'echo "<html><h3>OS X Wallpapers</h3>"; seq 4 | xargs [email protected] echo "<img src=/[email protected] width=500>"'
Mock service with JSON API
curl "http://some-service/v1/call1" > 1.json
shell2http -cgi /call1 'cat 1.json' /call2 'echo "Content-Type: application/json\n"; echo "{\"error\": \"ok\"}"'
Windows example
Returns value of var
for run in Windows cmd
(http://localhost:8080/test?var=value123
)
shell2http.exe -form /test "echo %v_var%"
With HTTP headers
Send custom HTTP headers:
shell2http -cgi / 'echo "Content-Type: application/javascript\n"; echo "{\"error\": \"ok\"}"'
On Windows:
shell2http.exe -cgi / "echo Content-Type: application/javascript& echo.& echo body"
Run from Docker-container
Example of test.Dockerfile
for server for get current date:
FROM msoap/shell2http
# may be install some alpine packages:
# RUN apk add --no-cache ...
CMD ["/date", "date"]
Build and run container:
docker build -f test.Dockerfile -t date-server .
docker run --rm -p 8080:8080 date-server
SSL
Run https server:
shell2http -cert=./cert.pem -key=./key.pem ...
Generate self-signed certificate:
go run $(go env GOROOT)/src/crypto/tls/generate_cert.go -host localhost
See also
- Create Telegram bot from command-line - shell2telegram
- A http daemon for local development - devd
- Turn any program that uses STDIN/STDOUT into a WebSocket server - websocketd
- The same tool configurable via JSON - webhook