2012-04-08 21 views
33

Come includere caratteri speciali come @ e & nei dati CURL POST? Sto cercando di passare un nome e una password come:Caratteri speciali come @ e & nei dati CURL POST

curl -d name=john [email protected]&3*J https://www.mysite.com 

Questo potrebbe causare problemi come @ è usato per il caricamento dei file e & per indicare più di un chiave/valore. C'è un modo per sfuggire a questi personaggi? \@ e \& non sembrano funzionare.

risposta

39

Curl> 7.18.0 ha un'opzione --data-urlencode che risolve questo problema. Usando questo, posso semplicemente inviare una richiesta POST come

curl -d name=john --data-urlencode [email protected]&3*J https://www.mysite.com 
+0

Funzionerà anche per le intestazioni? –

+0

Ho 7.52.1 e non riesco a farlo funzionare ... Posso fare --data-urlencode "qualcosa = è un test" ma non con virgolette doppie o simboli @ ... –

27

ne dite di usare i codici di entità ...

@ = %40

& = %26

Quindi, si avrebbe:

curl -d 'name=john&passwd=%4031%263*J' https://www.mysite.com

0

ho fatto questo

~]$ export A=g 

~]$ export B=! 

~]$ export C=nger 


    curl http://<>USERNAME<>1:[email protected]<>URL<>/<>PATH<>/ 
10

doppia citazione (" ") funziona l'intero URL .E.

curl "http://www.mysite.com?name=john&[email protected]&3*J" 
+2

La richiesta dovrebbe essere un POST, non un GET. –

3

Prova questo:

export CURLNAME="john:@31&3*J" 
curl -d -u "${CURLNAME}" https://www.example.com 
+0

Non funziona se il punto esclamativo ("!") È uno dei caratteri speciali. –

1

appena trovato un altro soluzioni lavorato per me. Puoi usare il segno "\" prima del tuo speciale.

passwd=\@31\&3*J