Réponses:
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.
Vous pouvez utiliser Netcat .
netcat est un simple utilitaire Unix qui lit et écrit des données sur des connexions réseau, en utilisant le protocole TCP ou UDP.
Voici un exemple pour récupérer la page d'accueil de 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
[…]
Le reste du code HTML est sorti sur la console. Remarque: Vous devez taper Return deux fois après HTTP/1.0
.
Vous pouvez utiliser interactif à la shells
fois avec python
ou perl
:
En 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
(...)
Voir perldoc WWW::Mechanize::Shell
ou http://search.cpan.org/~corion/WWW-Mechanize-Shell-0.52/lib/WWW/Mechanize/Shell.pm
En 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()
(...)
Oui, vous pouvez utiliser l'option "--config":
Spécifiez le nom de fichier à -K, --config comme '-' pour que curl lise le fichier depuis stdin.
Exemple:
$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>
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 ..
> openssl s_client -quiet -connect google.com:443
GET /
... HTML response
> openssl s_client -quiet -connect myprivateserver.com:443
POST /thing/pool ...
... response
Pour plus d'informations sur les options s_client de openssl, man s_client
contient les détails.
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
.