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-perl
instala três links simbólicos para lwp-request que são chamados /usr/bin/GET
, /usr/bin/HEAD
e /usr/bin/POST
. Estes fazem o que você esperaria. As versões recentes do perl-libwww-perl
pacote do OpenSuse omitem os links simbólicos (o que provavelmente é um bug), então você teria que criá-los ou usá-los lwp-request
diretamente. 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 curl
para 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 -u
e --write-out
args 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 get
comando 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 shells
com python
ou 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::Shell
ou 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_client
contém os detalhes.
get
comando fará o download do arquivo ecat
enviará o arquivo para a tela. Para se ter uma httppost
você pode usar algo como:quote post post.php x=1&y=z
.