Imaginez quelque chose comme ça:
$ curlsh http://www.example.org
> GET /foo/bar/bam
...output here...
> POST /thing/pool ...
... result here....
existe-t-il un outil qui me permet de faire cela?
Sur de nombreux systèmes Linux / Unix, votre pseudocode ne fonctionnera que dans n'importe quel shell, bien que vos chemins d'accès devraient vraiment être des URL complètes.
Par exemple, sur les systèmes basés sur Debian, le paquet libwww-perl
installe trois liens symboliques vers mf-demande qui sont appelés /usr/bin/GET
, /usr/bin/HEAD
et /usr/bin/POST
. Ceux-ci font ce que vous attendez. Les versions récentes du perl-libwww-perl
package d'OpenSuse omettent les liens symboliques (ce qui est probablement un bogue), vous devrez donc les créer vous-même ou les utiliser lwp-request
directement. En règle générale et pendant de nombreuses années, il est assez sûr que les exécutables GET, HEAD et POST sont disponibles sur les systèmes unixoïdes.
Bien sûr, vous pouvez également utiliser curl
pour toutes ces tâches, donc je ne comprends peut-être pas pourquoi vous pensez qu'un shell de ligne de commande tel que bash n'est pas interactif.
Merci pour les réponses.
Après avoir parcouru Google, j'ai trouvé resty , qui est un wrapper de script shell autour de l' outil curl . C'est vraiment ce que je veux. C'est 155 lignes de script shell, et quand je l'exécute, j'obtiens des fonctions pour GET, PUT, POST, DELETE et OPTIONS. Ces fonctions ne sont que des wrappers autour du programme curl trouvé sur mon chemin.
Cela fonctionne comme ceci sur 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 première ligne exécute simplement les commandes dans le shell actuel.
La ligne suivante, la commande "resty", définit la base de l'URL. Par la suite, tout appel à GET, PUT, POST ... fait implicitement référence à cette base. J'ai montré un exemple qui émet du JSON prettifié. Je pense que si votre serveur émet du JSON minifié, vous pouvez l'imprimer avec un script externe en canalisant la sortie.
Il existe un support pour les préférences basées sur l'hôte. Supposons que votre hôte cible soit api.example.org. Créez un fichier appelé ~ / .resty / api.example.org et insérez-y des lignes qui spécifient les arguments qui doivent être passés à chaque appel curl à l'hôte de ce nom. Chaque verbe http obtient sa propre ligne. Donc, en insérant ce contenu dans le fichier:
GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"
... signifie que chaque fois que je fais un GET lorsque api.example.org est le nom d'hôte de base, la commande curl utilisera implicitement les arguments -u
et --write-out
affichés ici. (-u pour l'authentification de base).
Comme autre exemple, vous pouvez spécifier l'en-tête Accept dans ce fichier, afin de toujours demander XML:
GET --header "Accept: application/xml"
Tout argument de ligne de commande curl est pris en charge dans ce fichier de préférences. Tous les arguments curl pour le tuple hôte + verbe doivent aller sur une seule ligne dans le fichier de préférences.
Pratique.
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
Les listes de répertoires ne fonctionnent que pour les sites Web qui envoient des index de répertoires. Mais même s'ils ne le font pas, vous pouvez toujours utiliser la get
commande pour obtenir des fichiers individuels.
get
commande téléchargera le fichiercat
affichera le fichier à l'écran. Pour obtenir un http ,post
vous pouvez utiliser quelque chose comme:quote post post.php x=1&y=z
.Vous pouvez utiliser Netcat .
Voici un exemple pour récupérer la page d'accueil de VLC
Le reste du code HTML est sorti sur la console. Remarque: Vous devez taper Return deux fois après
HTTP/1.0
.la source
Vous pouvez utiliser interactif à la
shells
fois avecpython
ouperl
:En Perl
Voir
perldoc WWW::Mechanize::Shell
ou http://search.cpan.org/~corion/WWW-Mechanize-Shell-0.52/lib/WWW/Mechanize/Shell.pmEn Python :
Voir http://wwwsearch.sourceforge.net/mechanize/
la source
Oui, vous pouvez utiliser l'option "--config":
Exemple:
la source
J'aime bien lynx pour la navigation interactive sur la ligne de commande. C'est plus un navigateur complet (qui s'intègre dans une application ncurses) qu'un outil HTML brut, cependant.
J'ai déjà testé des commandes HTML brutes sur SSL, pour lesquelles j'ai utilisé
openssl
, mais cela ne permet qu'une seule commande à la fois ..Pour plus d'informations sur les options s_client de openssl,
man s_client
contient les détails.la source