Existe uma maneira de usar o curl interativamente? Ou há uma shell curl / wget interativa?

9

Imagine algo assim:

$ curlsh http://www.example.org
> GET /foo/bar/bam
...output here...
> POST /thing/pool ...
... result here.... 

existe uma ferramenta que me permite fazer isso?

    
por Cheeso 16.10.2012 / 02:33

7 respostas

7

Obrigado pelas respostas.

Depois de pesquisar, encontrei resty , que é um wrapper de script de shell em torno do curl . Isso é realmente o que eu quero. São 155 linhas de script de shell e, quando eu o executo, recebo funções para GET, PUT, POST, DELETE e OPTIONS. Essas funções são apenas wrappers em torno do programa de 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 do URL. Depois disso, qualquer chamada para GET, PUT, POST ... referencia implicitamente essa base. Eu mostrei um exemplo que emite JSON prettified. Eu acho que se o seu servidor emite JSON diminuído, você pode 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 lá, linhas que especifiquem os argumentos que devem ser passados para cada chamada curl ao 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 toda vez que eu fizer um GET quando api.example.org for o nome do host base, o comando curl usará implicitamente os -u e --write-out args mostrados lá. (-u para autenticação básica).

Como outro exemplo, você pode especificar o cabeçalho Accept nesse arquivo, para que você sempre solicite XML:

GET --header "Accept: application/xml"

Qualquer linha de comando curl arg é suportado nesse arquivo de preferências. Todos os args de curl para a tupla host + verbo precisam ir em uma única linha no arquivo de preferências.

Prático.

    
por 16.10.2012 / 18:17
8

Em muitos sistemas Linux / Unix, seu pseudocódigo funcionará em qualquer shell, embora seus caminhos devam realmente ser 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 de /usr/bin/GET , /usr/bin/HEAD e /usr/bin/POST . Estes fazem o que você esperaria. Versões recentes do pacote perl-libwww-perl do OpenSuse omitem os links simbólicos (o que provavelmente é um bug), então você teria que criá-los você mesmo ou usar lwp-request diretamente. Geralmente e por muitos anos, tem sido uma suposição bastante segura que os executáveis GET, HEAD e POST estão 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.

    
por 16.10.2012 / 09:33
6

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 comando get para obter arquivos individuais.

    
por 16.10.2012 / 12:00
4

Você pode usar o Netcat .

netcat is a simple unix utility which reads and writes data across net‐ work connections, using TCP or UDP protocol.

Aqui está um exemplo para recuperar a home page 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 tipo Retorna duas vezes após HTTP/1.0 .

    
por 16.10.2012 / 09:38
1

Você pode usar o shells interativo 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
(...)

Veja perldoc WWW::Mechanize::Shell ou link

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()
(...)

Veja link

    
por 16.10.2012 / 19:22
0

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, embora ...

Eu testei comandos HTML brutos sobre SSL antes, para os quais usei openssl , mas isso só permite um comando de cada 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.

    
por 16.10.2012 / 18:35
0

Sim, você pode usar a opção "--config":

Specify the filename to -K, --config as '-' to make curl read the file from stdin.

Exemplo:

$ curl -K-
url https://github.com/blog
remote-name
<Ctrl + D>
    
por 22.01.2018 / 03:59

Tags