2012-04-08 44 views
33

Làm cách nào để bao gồm các ký tự đặc biệt như @ và & trong dữ liệu POST của cURL? Tôi đang cố gắng để vượt qua một tên và mật khẩu như:Các ký tự đặc biệt như @ và & trong dữ liệu POST cURL

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

Điều này sẽ gây ra vấn đề như @ được sử dụng cho các tập tin tải và & để xác định nhiều hơn một khóa/giá trị. Có cách nào tôi có thể thoát khỏi những nhân vật này không? \@\& dường như không hoạt động.

Trả lời

39

cURL> 7.18.0 có một tùy chọn --data-urlencode giải quyết vấn đề này. Sử dụng này, tôi chỉ có thể gửi một yêu cầu POST như

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

Điều này cũng có hoạt động cho tiêu đề không? –

+0

Tôi có 7.52.1 và tôi không thể làm việc này ... Tôi có thể làm --data-urlencode "something = đó là một thử nghiệm" nhưng không phải với dấu ngoặc kép hoặc biểu tượng @ ... –

27

Làm thế nào về việc sử dụng mã số đơn vị ...

@ = %40

& = %26

Vì vậy, bạn sẽ có:

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

0

tôi đã làm

~]$ export A=g 

~]$ export B=! 

~]$ export C=nger 


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

ngoặc kép này (" ") toàn bộ URL Nó hoạt động.

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

Yêu cầu được yêu cầu là một POST, không phải là GET. –

3

Hãy thử điều này:

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

Không hoạt động nếu dấu chấm than ("!") Là một trong các ký tự đặc biệt. –

1

Chỉ cần tìm thấy các giải pháp khác làm việc cho tôi. Bạn có thể sử dụng ký hiệu '\' trước tên đặc biệt của bạn.

passwd=\@31\&3*J 
Các vấn đề liên quan