我知道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的解决方案,所以用正则表达式替换“=”或其他东西是不太理想的。
答案 0 :(得分:2)
它应该能够......但也许不是......来自卷曲网站:
- data-urlencode
(HTTP)这会发布数据,类似于其他--data选项,但执行URL编码除外。 (在7.18.0中添加)
要符合CGI,该部件应以名称开头,后跟分隔符和内容规范。可以使用以下语法之一将零件传递给curl:
含量
这将使curl对内容进行URL编码并传递该内容。 请注意,以便内容不包含任何=或@符号,因为这样会使语法与下面的其他情况相匹配!
如果内容包含=
或@
符号,您可以将其作为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=\""
击> <击> 撞击>