Como incluir um caractere '&' em uma instrução bash curl


97

Estou tentando usar curl no bash para baixar uma página da Web, mas o &símbolo na URL não é interpretado como um caractere como eu gostaria. Alguma ideia de como posso convencer o bash de que o símbolo &é apenas um personagem chato e nada de especial?


Dê uma olhada no seguinte tópico que deve ajudá-lo - stackoverflow.com/questions/2067969/…
morgents

Eu tentei substituir o &símbolo com \&, '&', "&", ^&mas não foram capazes de obter o URL para avaliar corretamente. Na verdade, '&'funciona quando executo o comando curl do Terminal.app, mas falha quando o coloco em um script bash, envolvo em um loop e o executo.
Chernoff

Respostas:


121

Colocar todo o URL entre aspas duplas deve resolver o seu problema.


9
aspas simples podem ser melhores, a menos que haja necessidade de resolver variáveis.
jpm

Quando eu uso aspas em todo o URL, a expressão ${i}não retorna um valor.
Chernoff

2
No meu caso, as aspas duplas falharam, enquanto as aspas simples funcionaram perfeitamente.
abeboparebop

3
Tenha cuidado com o programa usado para digitar as aspas. Enquanto estava com pressa para editar um script de shell, usei um programa de edição de texto. Colocava aspas inclinadas em vez de aspas duplas retas. Isso realmente bagunça o script e torna o problema difícil de encontrar!
David

39
curl "http://www.example.com?m=method&args=1"

Você está usando o & como delimitador para um URL GET? Ou está em um dado?

Se estiver em dados, você deve codificá-lo para um caractere HTML, caso contrário, coloque-o entre aspas.

A codificação para &deve se tornar %26no URL.

curl "http://www.example.com?m=this%26that

Estou usando o &símbolo como um dado, quase exatamente como você mostrou. O problema é que, em vez de valores numéricos, estou usando ${i}. Então, eu quero http://www.example.com?m=method&args=${i}avaliar como um URL.
Chernoff

3
A maneira como acabei de mostrar a URL usa o '&' como um delimitador para as variáveis ​​GET, então agora estou confuso, em $ [i] você tem um dado que contém '&'? Se for esse o caso, você precisará codificá-lo em URL. & =% 26
Matt Clark

1
Procurei em toda a internet e não encontrei a solução. @MattClark você é o herói. Acabei de codificar o url e que era um dado e meu script está funcionando bem.
Haris ur Rehman

1
Está faltando "no final do segundo trecho de código?
David

23

Colocar aspas simples ao redor do &símbolo parece funcionar. Ou seja, usar uma URL como http://www.example.com/page.asp?arg1=${i}'&'arg2=${j}curl retorna a página da web solicitada.


2
você deve incluir o requisito do argumento na questão para que fique claro para futuras visualizações.
Manatax

Por que essa resposta foi aceita? Esta resposta deve ser acedida stackoverflow.com/a/13339492/2898694
Sharikov Vladislav

13

Em vez de tentar os caracteres de escape "&", você pode especificar parâmetros de url http em solicitações POST com o parâmetro -d conforme mostrado abaixo:

curl -X POST http://www.example.com \
-d arg1=this \
-d arg2=that

Se a solicitação for um GET, você também deve adicionar a opção -G, que diz ao curl para enviar os dados com a solicitação GET.

curl -X GET -G http://www.example.com \
-d arg1=this \
-d arg2=that

Esta é a melhor resposta! THX!
unbreak

Isso funcionou para mim. Adicionar aspas duplas não funcionou.
Juhog

9

Você pode usar em seu %26lugar &. O código da entidade funcionará bem.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.