邮编中的特殊字符

时间:2018-07-24 17:35:01

标签: bash curl apache-nifi

我正在尝试使用以下卷曲

curl -k 'https://myhost.com:9091/nifi-api/access/token' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' --data "username=$USERNAME&password=$PASSWORD" --compressed —insecure

但是在输入密码%时出现错误

URLDecoder: Incomplete trailing escape (%) pattern

我在网上看到了使用--data-urlencode的建议,但是随后出现以下错误。

The username and password must be specified.

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

--data-urlencode是多次添加它的方法,每个参数添加一次

userh='vf&re'
passwordh='asdaf%'
curl 'http://127.0.0.1:8080/' --data-urlencode "username=$userh" --data-urlencode "password=$passwordh"

让我们启动netcat侦听器以检查发送了什么

netcat -l 8080

收到的数据:

POST / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: curl/7.60.0
Accept: */*
Content-Length: 34
Content-Type: application/x-www-form-urlencoded

username=vf%26re&password=asdaf%25

在一个选项中发送所有参数将不起作用,因为密码参数丢失会触发服务器错误“必须指定用户名和密码。”

curl 'http://127.0.0.1:8080/' --data-urlencode "username=$userh&password=$passwordh"

响应:

POST / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: curl/7.60.0
Accept: */*
Content-Length: 38
Content-Type: application/x-www-form-urlencoded

username=vf%26re%26password%3Dasdaf%25

来自OP的带有--data的第一个命令也将不起作用,因为它会发送%符号,就像触发服务器错误那样,“看到”且编码请求的百分比不完整。

POST / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: curl/7.60.0
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 33

username=asdasdas&password=asdaf%

基于this answer