Curl 上傳檔案

Curl 一種文字介面的 Web Client,有 shell 的版本跟 lib 的版本,被廣泛應用在很多語言的 lib 上。

官方網站:http://curl.haxx.se

有原始碼、文件等等資料可以瀏覽跟下載。

最簡單的使用方式 例如:

$ curl http://mlwmlw.org

他就會回傳這個網站的 html 直接輸出到 stdout,甚至還能 POST DATA(FILE)
在 7.18 以後支援 –data-urlencode 這個參數,可以傳檔案並且指定 post name。

$ curl http://mlwmlw.org --data-urlencode [email protected]

他原本的用法就是 @檔案名稱,就能指定要上傳的檔案了,現在加上 at 前面可以指定 POST 的 field name。

不然一般情況就用 -d @file.txt 就可以了

如果要搭配一些傳輸的時間資訊,可以加上 write-out 的參數,

$ curl -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n'
   -o /dev/null --data-urlencode [email protected] -s http://mlwmlw.org

如果要測試一些 rest 的 api 可以指定 method

curl -X POST http://mlwmlw.org -d "name=1&test=2"
curl -X GET http://mlwmlw.org
curl -X DELETE http://mlwmlw.org
curl -X PUT http://mlwmlw.org

在 windows 輸出空白可以用

$ curl.exe -w '...' -o NUL ...

參考資源:

web-based shell ansi/vt100

ajaxterm

Python implement

shellinabox

http://shellinabox.googlecode.com

http://chunchaichang.blogspot.com/2011/04/shellinabox-linux-shell.html

貌似好用很多,只是我想改他但不是冠希…

介紹一下里面一個參數, –service,預設沒下等同於 –service /:LOGIN

這個參數的說明


SERVICE := <url-path> ':' APP
APP     := 'LOGIN' | 'SSH' [ : <host> ] | USER ':' CWD ':' CMD
USER    := 'AUTH' | <username> ':' <groupname>
CWD     := 'HOME' | <dir>
CMD     := 'SHELL' | <cmdline>

還蠻有趣的一個定義方式…,他讓你可以定義多種 shell ~

預設是一進去首頁 http://shell/ 就會預設登入該台伺服器的 /bin/login 並且開啟 shell。

記得加上 –css /usr/local/share/doc/shellinabox/white-on-black.css 改成習慣的黑色背景…

但是如果你想要用 ssh 登其他伺服器,可以設定一些其他的 APP,

例如 想要用 http://shell/mlwmlw 登 mlwmlw.org 就可以這樣下參數

–service /mlwmlw:SSH:mlwmlw.org –service /:LOGIN

而且也可以加入數個 service

但是…用 CentOS 好像指定 SSH 會有一個 bug 按照下文把

http://code.google.com/p/shellinabox/issues/detail?id=50

shellinabox/service.c 的 -oVisualHostKey=no 註解掉重編就能跑了。


$ /usr/local/bin/shellinaboxd --port 443 --cert /tmp \
  --css /usr/local/share/doc/shellinabox/white-on-black.css

other

想要用 node.js + websocket 實作一套..

目前已經用 libssh 寫了一個 node.js 的 module..還堪運作,配上 socket.io 來傳資料,接下來要瞭解一下 ansi 的 terminal code~在接上 shellinabox 寫好的 v100 的轉碼介面~

http://wiki.bash-hackers.org/scripting/terminalcodes 可以先看一下入門文章= =

Ansi/vt100 入門指引…

Ansi/Vt100 是比較常見通用的 控制碼 協定,好像在 bbs 跟 ssh 上都是用這個在表示的,這控制符號除了可以改變前景背景顏色,好像還可以表示滑鼠游標跟輸入游標等等的狀態。

tput 是 linux 上的一個指令,算是一種是用來查詢 終端符號 資料庫的指令,因為 terminal 的協定有很多種阿~每種的值都有點不一樣,但是他們的目的跟功能應該都大同小異的,所以這指令能偵測你現在終端用的協定幫你用字傳查出你想要的控制碼。

   _/_/  _/_/   _/    _/       _/
  _/  __/ _/   _/     _/ __/ _/
 _/      _/   _/_/_/  _/   _/
這蠻有趣的…玩一下= =