Respuestas:
En muchos sistemas Linux / Unix, su pseudocódigo simplemente funcionará en cualquier shell, aunque sus rutas realmente deberían ser URL completas.
Por ejemplo, en sistemas basados en Debian, el paquete libwww-perl
instala tres enlaces simbólicos a lwp-solicitud que se llama /usr/bin/GET
, /usr/bin/HEAD
y /usr/bin/POST
. Estos hacen lo que esperarías. Las versiones recientes del perl-libwww-perl
paquete de OpenSuse omiten los enlaces simbólicos (lo que probablemente sea un error), por lo que tendría que crearlos usted mismo o usarlos lwp-request
directamente. En general y durante muchos años, ha sido una suposición bastante segura que los ejecutables GET, HEAD y POST están disponibles en sistemas unixoides.
Por supuesto, también podría usarlo curl
para todas estas tareas, por lo que quizás no entiendo por qué siente que un shell de línea de comandos como bash no es interactivo.
Gracias por las respuestas
Después de buscar en Google, encontré resty , que es un contenedor de script de shell alrededor de la herramienta de rizo . Esto es realmente lo que quiero. Son 155 líneas de script de shell, y cuando lo ejecuto, obtengo funciones para GET, PUT, POST, DELETE y OPTIONS. Estas funciones son solo envoltorios alrededor del programa curl que se encuentra en mi camino.
Funciona así en 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 primera línea allí solo ejecuta los comandos en el shell actual.
La siguiente línea, el comando "resty", establece la base de URL. A partir de entonces, cualquier llamada a GET, PUT, POST ... hace referencia implícita a esa base. Mostré un ejemplo que emite JSON prettified. Creo que si su servidor emite JSON minimizado, podría imprimirlo con un script externo canalizando la salida.
Hay soporte para preferencias basadas en host. Supongamos que su host de destino es api.example.org. Escriba un archivo llamado ~ / .resty / api.example.org e inserte allí líneas que especifiquen los argumentos que se deben pasar a cada llamada curl al host con ese nombre. Cada verbo http tiene su propia línea. Entonces, insertando este contenido en el archivo:
GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"
... significa que cada vez que hago un GET cuando api.example.org es el nombre de host base, el comando curl usará implícitamente los argumentos -u
y que se --write-out
muestran allí. (-u para autenticación básica).
Como otro ejemplo, podría especificar el encabezado Aceptar en ese archivo, de modo que siempre solicite XML:
GET --header "Accept: application/xml"
Cualquier línea de comando curl arg es compatible con ese archivo de preferencias. Todos los argumentos curl para la tupla host + verbo deben ir en una sola línea en el archivo de preferencias.
Práctico.
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
Los listados de directorio solo funcionan para sitios web que envían índices de directorio. Pero incluso si no lo hacen, puede usar el get
comando para obtener archivos individuales.
Puedes usar Netcat .
netcat es una sencilla utilidad de Unix que lee y escribe datos a través de conexiones de red, utilizando el protocolo TCP o UDP.
Aquí hay un ejemplo para recuperar la página de inicio 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
[…]
El resto del HTML se envía a la consola. Nota: debe escribir Return dos veces después HTTP/1.0
.
Puede usar interactivo shells
tanto con python
o 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
(...)
Ver perldoc WWW::Mechanize::Shell
o 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()
(...)
Sí, puedes usar la opción "--config":
Especifique el nombre del archivo a -K, --config como '-' para hacer que curl lea el archivo desde stdin.
Ejemplo:
$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>
Me gusta bastante Lynx para la navegación interactiva en la línea de comandos. Sin embargo, es más un navegador completo (que se adapta a una aplicación ncurses) que una herramienta HTML sin formato.
He probado comandos HTML sin procesar sobre SSL antes, para lo cual utilicé openssl
, pero esto solo permite un comando a la vez.
> openssl s_client -quiet -connect google.com:443
GET /
... HTML response
> openssl s_client -quiet -connect myprivateserver.com:443
POST /thing/pool ...
... response
Para obtener más información sobre las opciones s_client de openssl, man s_client
contiene los detalles.
get
comando descargará el archivo ycat
mostrará el archivo en la pantalla. Para tener una httppost
puedes usar algo como:quote post post.php x=1&y=z
.