linux Curl命令不传递参数值,参数值为#

dojqjjoe  于 2023-06-05  发布在  Linux
关注(0)|答案(2)|浏览(260)

我正在使用下一个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命令中提供带有#的值?

9avjhtql

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%23'
curl -XPOST 'https://httpbin.org/post?key=value%23'
yeotifhr

yeotifhr2#

#是URI引用中的特殊字符。它划分了一个片段。请看这里(注意链接本身包含#)。curl不会将#或随后的任何内容作为请求的一部分发送。
如果您希望将其视为请求的一部分,则应该对#进行URL编码(使用%23)。注意,服务器将看到%23,而不是#。它应该在使用字符串之前对其进行URL解码。
当然,以纯文本形式发送密码是您在生活中最不想做的事情。

相关问题