loop curl obter pedido bash

5

Estou tentando automatizar um script curl e, eventualmente, torná-lo loop também. Eu descobri que não posso usar nenhum loop como:

for i in 'cat authors'
do
    curl *line here*   "www.test.com/autors?string="$i"&proc=39"
etc
Variáveis

ou mesmo env glob para CURL

Existe uma maneira de fazer um loop de solicitação get em curl para uma variável?

curl -H "Host: www.test.com" -G "www.test.com/autors?string="author+name"&proc=39"

Tudo que eu obtenho é o gráfico de tráfego que CURL tem e nenhum bom resultado. Estou usando o bash

    
por CurtyJB 11.05.2011 / 20:44

2 respostas

5

Tente esta construção:

 while read author; do
      curl "http://www.test.com/authors?string=$author&proc=39"
 done < authors

Isso salvará o gato, terá que fazer coisas em backticks, etc. Também permitiria que você lesse várias colunas fora do arquivo de entrada, se quisesse, mas especificando apenas uma variável para buscar como no meu exemplo obter toda a linha.

    
por 11.05.2011 / 20:32
5

authors contain names like with spaces and i guess dots

Várias coisas acontecendo:

Primeiro, a maneira como você está fazendo o loop for simplesmente não funciona. Tente isto:

 for i in 'cat authors'
 do
    echo "Author = \"$i\""
 done

Veja o que está acontecendo? Cada espaço em branco separa um valor para $i . Se você tiver primeiro e último nomes, estará obtendo uma linha com apenas um primeiro nome e uma linha com apenas um sobrenome.

Agora tente isto:

cat authors | while read i
do
    echo "Author = \"$i\""
done

Um pouco melhor? Agora, $i é toda sua linha. (Sim, eu sei sobre o "gato inútil", mas veja onde estou indo aqui!)

Em segundo lugar, você pode ter que converter esses espaços e pontos em caracteres de URL válidos. Os espaços devem ser convertidos em %20 . Vamos dar uma abordagem diferente:

 sed 's/ /%20/g' authors | while read test
do
    echo "curl *line here* www.test.com/authors?string=$i&proc=39"
done

(Agora, você vê porque eu tive o cat .)

Isso deve imprimir o seu comando curl. O que estou fazendo é pegar o arquivo authors e converter os espaços para a string %20 . Agora, posso me livrar das aspas ao redor da string que também estão causando problemas.

Assim, podemos agora nos livrar do eco e executar o comando CURL real:

 sed 's/ /%20/g' authors | while read test
do
    curl *line here* www.test.com/authors?string=$i&proc=39
done

Agora, o que o *line here* representa? Essa é a sua lista de opções? Ah, e você tinha autores em vez de autores em seu programa. Você errou aqui, ou é assim que o seu programa supostamente é?

    
por 11.05.2011 / 21:14