cURL可以编码等于(=)符号吗?

时间:2015-03-24 16:52:22

标签: curl urlencode url-encoding

我知道cURL可以做这样的事情:

curl -v "http://localhost:30001/data" --data-urlencode "msg=hello world"

...但是如果我的“msg”包含一个等号(=)符号怎么办?

curl -v "http://localhost:8080/data" --data-urlencode "msg=hello=&msg2=hello2=" --trace-ascii /dev/stdout

这导致msg=hello%3D%26msg2%3Dhello2%3D

有没有办法cURL可以编码这个而不需要使用Python或其他东西(这是我目前的解决方案)?我希望有一个特定于cURL的解决方案,所以用正则表达式替换“=”或其他东西是不太理想的。

1 个答案:

答案 0 :(得分:2)

它应该能够......但也许不是......来自卷曲网站:

  

- data-urlencode

     

(HTTP)这会发布数据,类似于其他--data选项,但执行URL编码除外。 (在7.18.0中添加)

     

要符合CGI,该部件应以名称开头,后跟分隔符和内容规范。可以使用以下语法之一将零件传递给curl:

     

含量

     

这将使curl对内容进行URL编码并传递该内容。 请注意,以便内容不包含任何=或@符号,因为这样会使语法与下面的其他情况相匹配!

Source

如果内容包含=@符号,您可以将其作为XML或JSON发送,具体取决于您发送的位置:

curl -v "http://localhost:30001/data" -H Content-Type:"application/xml" -d '<comments comments="30DAYCC 1ST 2ND 07 000001.00 Test notes"/>'

要指定数据应作为POST数据发送,请使用-X选项以及POST

curl -v -X POST "http://localhost:30001/data" -H Content-Type:"application/xml" -d '<comments comments="30DAYCC 1ST 2ND 07 000001.00 Test notes"/>'

除此之外,我认为您必须事先使用某些东西对数据进行编码。

编辑:抱歉,如果我的xml无效xml。我通常不会写出我的xml,所以是的。

如果您想以示例中的方式发送它,请尝试在消息部分周围加上引号。

curl -v "http://localhost:30001/data" --data-urlencode "msg=\"hello=\""

<击>