Respostas:
Em muitos sistemas Linux / Unix, seu pseudocódigo funcionará em qualquer shell, embora seus caminhos sejam realmente URLs completos.
Por exemplo, em sistemas baseados em Debian, o pacote libwww-perlinstala três links simbólicos para lwp-request que são chamados /usr/bin/GET, /usr/bin/HEADe /usr/bin/POST. Estes fazem o que você esperaria. As versões recentes do perl-libwww-perlpacote do OpenSuse omitem os links simbólicos (o que provavelmente é um bug), então você teria que criá-los ou usá-los lwp-requestdiretamente. Geralmente e por muitos anos, tem sido bastante seguro que os executáveis GET, HEAD e POST estejam disponíveis em sistemas unixóides.
É claro que você também pode usar curlpara todas essas tarefas, então talvez eu não entenda por que você acha que um shell de linha de comando como o bash não é interativo.
Obrigado pelas respostas.
Depois de pesquisar no Google, achei resty , que é um wrapper de script de shell em torno da ferramenta curl . Isso é realmente o que eu quero. São 155 linhas de script de shell e, quando o executo, obtenho funções para GET, PUT, POST, DELETE e OPTIONS. Essas funções são apenas wrappers em torno do programa curl encontrado no meu caminho.
Funciona assim no 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" : [ ... ]
},
}
$
A primeira linha lá apenas executa os comandos no shell atual.
A próxima linha, o comando "resty", define a base da URL. Depois disso, qualquer chamada para GET, PUT, POST ... faz referência implícita a essa base. Eu mostrei um exemplo que emite JSON prettified. Acho que se o seu servidor emitir JSON reduzido, você poderá imprimi-lo com um script externo, canalizando a saída.
Há suporte para preferências baseadas em host. Suponha que seu host de destino seja api.example.org. Crie um arquivo chamado ~ / .resty / api.example.org e insira nele as linhas que especificam argumentos que devem ser passados a cada chamada de conexão com o host com esse nome. Cada verbo http obtém sua própria linha. Então, inserindo este conteúdo no arquivo:
GET -u myusername:mypassword --write-out "\nStatus = %{http_code}\n"
... significa que cada vez que eu faço um GET quando api.example.org é o nome do host base, o comando curl usará implicitamente o -ue --write-outargs mostrado lá. (-u para autenticação básica).
Como outro exemplo, você pode especificar o cabeçalho Accept nesse arquivo, para solicitar sempre o XML:
GET --header "Accept: application/xml"
Qualquer argumento de linha de comando curl é suportado nesse arquivo de preferências. Todos os argumentos de curvatura para a tupla host + verbo precisam seguir uma única linha no arquivo de preferências.
Handy.
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
As listagens de diretório funcionam apenas para sites que enviam índices de diretório. Mas, mesmo que não, você ainda pode usar o getcomando para obter arquivos individuais.
Você pode usar o Netcat .
O netcat é um utilitário unix simples que lê e grava dados nas conexões de rede, usando o protocolo TCP ou UDP.
Aqui está um exemplo para recuperar a página inicial do 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
[…]
O restante do HTML é enviado para o console. Nota: Você precisa digitar Return duas vezes depois HTTP/1.0.
Você pode usar interativo shellscom pythonou perl:
Em 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
(...)
Consulte perldoc WWW::Mechanize::Shellou http://search.cpan.org/~corion/WWW-Mechanize-Shell-0.52/lib/WWW/Mechanize/Shell.pm
Em 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()
(...)
Sim, você pode usar a opção "--config":
Especifique o nome do arquivo como -K, --config como '-' para fazer o curl ler o arquivo a partir de stdin.
Exemplo:
$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>
Eu gosto bastante do lynx para navegação interativa na linha de comando. É mais um navegador completo (que se encaixa em um aplicativo ncurses) do que uma ferramenta HTML bruta.
Eu testei comandos HTML brutos sobre SSL antes, para os quais usei openssl, mas isso permite apenas um comando por 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 mais informações sobre as opções s_client do openssl, man s_clientcontém os detalhes.
getcomando fará o download do arquivo ecatenviará o arquivo para a tela. Para se ter uma httppostvocê pode usar algo como:quote post post.php x=1&y=z.