Risposte:
Su molti sistemi Linux / Unix, il tuo pseudocodice funzionerà in qualsiasi shell, anche se i tuoi percorsi dovrebbero essere davvero URL completi.
Ad esempio, nei sistemi basati su Debian, il pacchetto libwww-perl
installa tre collegamenti simbolici a lwp-request che sono chiamati /usr/bin/GET
, /usr/bin/HEAD
e /usr/bin/POST
. Questi fanno quello che ti aspetteresti. Le versioni recenti del perl-libwww-perl
pacchetto OpenSuse omettono i collegamenti simbolici (che probabilmente è un bug), quindi dovresti crearli tu stesso o usarli lwp-request
direttamente. In generale e per molti anni, è stato abbastanza sicuro che gli eseguibili GET, HEAD e POST siano disponibili su sistemi unixoid.
Ovviamente potresti anche usare curl
per tutte queste attività, quindi forse non capisco perché ritieni che una shell della riga di comando come bash non sia interattiva.
Grazie per le risposte
Dopo aver cercato su Google, ho trovato riposante , che è un involucro di script shell attorno allo strumento arricciatura . Questo è davvero quello che voglio. Sono 155 righe di script di shell e quando lo eseguo ottengo funzioni per GET, PUT, POST, DELETE e OPTIONS. Queste funzioni sono solo avvolgenti attorno al programma di arricciatura trovato sul mio percorso.
Funziona così su MacOSX bash:
$ . resty
$ resty https://api.example.org
https://api.myhost.com*
$ GET /v1/o/orgname -u myusername:password
{
"createdAt" : 1347007133508,
"createdBy" : "admin",
"displayName" : "orgname",
"environments" : [ "test", "prod" ],
"lastModifiedAt" : 1347007133508,
"lastModifiedBy" : "admin",
"name" : "orgname",
"properties" : {
"propertyList" : [ ... ]
},
}
$
La prima riga lì esegue solo i comandi nella shell corrente.
La riga successiva, il comando "resty", imposta la base URL. Successivamente, qualsiasi chiamata a GET, PUT, POST ... fa implicitamente riferimento a tale base. Ho mostrato un esempio che emette JSON preimpostato. Penso che se il tuo server emette JSON minimizzato, potresti stamparlo con uno script esterno eseguendo il piping dell'output.
C'è supporto per le preferenze basate sull'host. Supponiamo che il tuo host di destinazione sia api.example.org. Crea un file chiamato ~ / .resty / api.example.org e inserisci lì delle righe che specificano gli argomenti che dovrebbero essere passati a ogni chiamata di arricciatura all'host con quel nome. Ogni verbo http ha la sua linea. Quindi, inserendo questo contenuto nel file:
GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"
... significa che ogni volta che faccio un OTTENERE quando api.example.org è il nome host di base, il comando curl utilizzerà implicitamente -u
e --write-out
args mostrati lì. (-u per l'autorizzazione di base).
Come altro esempio, è possibile specificare l'intestazione Accept in quel file, in modo da richiedere sempre XML:
GET --header "Accept: application/xml"
Qualsiasi arg della riga di comando curl è supportato nel file delle preferenze. Tutti gli argomenti arricciati per la tupla verbo host + devono andare su una sola riga nel file delle preferenze.
Maneggevole.
lftp:
$ lftp http://repo.xplico.org/pool/
cd ok, cwd=/pool
lftp repo.xplico.org:/pool> ls
drwxr-xr-x -- /
drwxr-xr-x - 2012-02-13 09:48 main
lftp repo.xplico.org:/pool> cd main
lftp repo.xplico.org:/pool/main> ls
drwxr-xr-x -- ..
drwxr-xr-x - 2012-02-13 09:48 x
Gli elenchi di directory funzionano solo per i siti Web che inviano indici di directory. Ma anche se non lo fanno, puoi comunque usare il get
comando per ottenere singoli file.
Puoi usare Netcat .
netcat è una semplice utility unix che legge e scrive dati attraverso connessioni di rete, usando il protocollo TCP o UDP.
Ecco un esempio per recuperare la home page di VLC
nc www.videolan.org 80
GET http://www.videolan.org/vlc/ HTTP/1.0
HTTP/1.1 200 OK
Date: Tue, 16 Oct 2012 07:34:48 GMT
Server: Apache/2.2.16 (Debian)
Content-Location: index.html
[…]
Il resto dell'HTML viene inviato alla console. Nota: è necessario digitare Return due volte dopo HTTP/1.0
.
È possibile utilizzare interattivo shells
con python
o perl
:
In Perl
$ perl -MWWW::Mechanize::Shell -eshell
(no url)> get http://cnn.com
Retrieving http://cnn.com(200)
http://edition.cnn.com/> title
CNN.com International - Breaking, World, Business, Sports, Entertainment and Video News
http://edition.cnn.com/> content
(...)
Vedi perldoc WWW::Mechanize::Shell
o http://search.cpan.org/~corion/WWW-Mechanize-Shell-0.52/lib/WWW/Mechanize/Shell.pm
In Python :
$ python -i -c 'import mechanize; br = mechanize.Browser(factory=mechanize.RobustFactory())'
>>> br.open("http://xkcd.com/")
<response_seek_wrapper at 0x2824a28 whose wrapped object = <closeable_response at 0x27c2710 whose fp = <socket._fileobject object at 0x27be3d0>>>
>>> br.title()
'xkcd: Identity'
>>> print br.response().read()
(...)
Sì, puoi usare l'opzione "--config":
Specificare il nome file su -K, --config come '-' per fare in modo che l'arricciatura legga il file da stdin.
Esempio:
$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>
Mi piace molto la lince per la navigazione interattiva sulla riga di comando. È più un browser completo (che si adatta a un'applicazione ncurses) che uno strumento HTML non elaborato, però ...
Ho testato prima i comandi HTML grezzi su SSL, per i quali ho usato openssl
, ma questo consente solo un comando alla volta.
> openssl s_client -quiet -connect google.com:443
GET /
... HTML response
> openssl s_client -quiet -connect myprivateserver.com:443
POST /thing/pool ...
... response
Per maggiori informazioni sulle opzioni s_client di openssl, man s_client
contiene i dettagli.
get
comando scaricherà il filecat
emetterà il file sullo schermo. Per ottenere un HTTPpost
è possibile usare qualcosa come:quote post post.php x=1&y=z
.