我正在使用下一个curl命令:curl --silent --insecure --max-time 10000 -X POST -G 'https://1.1.1.1:8443/prefix' -d username=user -d password=blabla12#由于某种原因,我的服务器获得的密码没有#.(blabla 12),身份验证失败。如何在curl命令中提供带有#的值?
9avjhtql1#
curl -G -XPOST 'https://httpbin.org/post' -d 'key=value#'与运行curl -XPOST 'https://httpbin.org/post?key=value#'相同。#将Fragment-id与URL的其余部分分开。这在调用curl -G -XPOST 'https://httpbin.org/post' -d 'a=b#c' -d 'd=e' -d 'f=g'时变得更加明显-您的后端将只接收a=b,其他所有内容都是fragment-id的一部分。您可以运行curl -v来查看实际的请求(它只包含查询字符串,不包括第一个散列符号)。解决办法?通过对散列符号进行百分比编码,使其不可能与fragment-id分隔符混淆:
curl -G -XPOST 'https://httpbin.org/post' -d 'key=value#'
curl -XPOST 'https://httpbin.org/post?key=value#'
#
curl -G -XPOST 'https://httpbin.org/post' -d 'a=b#c' -d 'd=e' -d 'f=g'
a=b
curl -v
curl -G -XPOST 'https://httpbin.org/post' -d 'key=value%23' curl -XPOST 'https://httpbin.org/post?key=value%23'
yeotifhr2#
#是URI引用中的特殊字符。它划分了一个片段。请看这里(注意链接本身包含#)。curl不会将#或随后的任何内容作为请求的一部分发送。如果您希望将其视为请求的一部分,则应该对#进行URL编码(使用%23)。注意,服务器将看到%23,而不是#。它应该在使用字符串之前对其进行URL解码。当然,以纯文本形式发送密码是您在生活中最不想做的事情。
curl
%23
2条答案
按热度按时间9avjhtql1#
curl -G -XPOST 'https://httpbin.org/post' -d 'key=value#'
与运行curl -XPOST 'https://httpbin.org/post?key=value#'
相同。#
将Fragment-id与URL的其余部分分开。这在调用
curl -G -XPOST 'https://httpbin.org/post' -d 'a=b#c' -d 'd=e' -d 'f=g'
时变得更加明显-您的后端将只接收a=b
,其他所有内容都是fragment-id的一部分。您可以运行curl -v
来查看实际的请求(它只包含查询字符串,不包括第一个散列符号)。解决办法?通过对散列符号进行百分比编码,使其不可能与fragment-id分隔符混淆:
yeotifhr2#
#
是URI引用中的特殊字符。它划分了一个片段。请看这里(注意链接本身包含#
)。curl
不会将#
或随后的任何内容作为请求的一部分发送。如果您希望将其视为请求的一部分,则应该对
#
进行URL编码(使用%23
)。注意,服务器将看到%23
,而不是#
。它应该在使用字符串之前对其进行URL解码。当然,以纯文本形式发送密码是您在生活中最不想做的事情。