Qualquer maneira de codificar o comando url in curl?

93

Eu tenho um URL que tem espaço em sua consulta param. Eu quero usar isso em enrolar por exemplo,

curl -G "http://localhost:30001/data?zip=47401&utc_begin=2013-8-1 00:00:00&utc_end=2013-8-2 00:00:00&country_code=USA"

que distribui

Malformed Request-Line

De acordo com meu entendimento, o / p é devido ao espaço presente no parâmetro de consulta.

Existe algum espaço para codificar o URL automaticamente antes de fornecê-lo ao comando curl?

    
por Aashish P. 14.08.2013 / 18:03

2 respostas

146

curl suporta codificação de URL internamente com --data-urlencode :

$ curl -G -v "http://localhost:30001/data" --data-urlencode "msg=hello world" --data-urlencode "msg2=hello world2"

-G também é necessário para anexar os dados ao URL.

Cabeçalhos de rastreamento

> GET /data?msg=hello%20world&msg2=hello%20world2 HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu)
> Host: localhost
> Accept: */*
    
por 14.08.2013 / 18:40
7
 curl -G "$( echo "$URL" | sed 's/ /%20/g' )"

Em que $URL é o URL em que você deseja fazer as traduções.

Também há mais de um tipo de tradução (codificação) que você pode ter em um URL, então você pode querer fazer:

curl -G "$(perl -MURI::Escape -e 'print uri_escape shift, , q{^A-Za-z0-9\-._~/:}' -- "$URL")"

em vez disso.

    
por 14.08.2013 / 18:16

Tags