C'è un modo per usare l'arricciatura in modo interattivo? Oppure esiste una shell interattiva curl / wget?


9

Immagina qualcosa del genere:

$ curlsh http://www.example.org
> GET /foo/bar/bam
...output here...
> POST /thing/pool ...
... result here.... 

c'è uno strumento che mi permette di farlo?

Risposte:


8

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-perlinstalla tre collegamenti simbolici a lwp-request che sono chiamati /usr/bin/GET, /usr/bin/HEADe /usr/bin/POST. Questi fanno quello che ti aspetteresti. Le versioni recenti del perl-libwww-perlpacchetto OpenSuse omettono i collegamenti simbolici (che probabilmente è un bug), quindi dovresti crearli tu stesso o usarli lwp-requestdirettamente. 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 curlper tutte queste attività, quindi forse non capisco perché ritieni che una shell della riga di comando come bash non sia interattiva.


8

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 -ue --write-outargs 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.


6

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 getcomando per ottenere singoli file.


Il getcomando scaricherà il file catemetterà il file sullo schermo. Per ottenere un HTTP postè possibile usare qualcosa come: quote post post.php x=1&y=z.
donothings riusciti

5

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.


4
Amico, sei hardcore. Netcat per fare HTTP? Ahia! Speravo in qualcosa con qualche campana e fischietto in più.
Cheeso,

1
Non ho idea di cosa cerchi. Almeno fa quello che hai dichiarato nella tua domanda, che non era molto dettagliato. Netcat è uno strumento molto utile, per la navigazione web forse non è adatto. Dipende dalle tue esigenze.
Marco,

Senza offesa, sto solo dicendo che sarebbe bello se lo strumento fosse un po 'più intelligente. Come se ci fosse un modo per impostare le intestazioni HTTP che avrebbe inviato. O se non dovessi digitare "HTTP / 1.1" per ogni richiesta. o ecc.
Cheeso,

1

È possibile utilizzare interattivo shellscon pythono 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::Shello 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()
(...)

Vedi http://wwwsearch.sourceforge.net/mechanize/


1

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>

0

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_clientcontiene i dettagli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.