curl基础认证中含引号等特殊字符的密码请求方法
解决curl基础认证中密码含特殊字符的问题
当使用curl的-u参数进行基础认证时,如果密码包含"、<这类shell特殊字符,直接写入会被shell解析,导致命令失效。针对示例中的用户名myusername、密码pass"12<o,可以用以下几种方法解决:
方法一:转义特殊字符
对每个shell特殊字符添加反斜杠\进行转义,确保shell不会将其当作控制字符处理:curl -k -u myusername:pass\"12\<o https://www.myurl.com/endpoint方法二:用单引号包裹认证串
将整个用户名:密码用单引号括起来,单引号内的内容不会被shell解析,是最简便的处理方式:curl -k -u 'myusername:pass"12<o' https://www.myurl.com/endpoint方法三:手动生成Base64认证头
基础认证的本质是将用户名:密码进行Base64编码后,通过Authorization请求头传递。先生成编码串:echo -n 'myusername:pass"12<o' | base64得到编码结果后,直接在curl中指定请求头:
curl -k -H 'Authorization: Basic bXl1c2VybmFtZTpwYXNzIjEyPG8=' https://www.myurl.com/endpoint注意:
echo必须加-n参数,避免换行符被编码,否则会导致认证失败。方法四:从文件读取认证信息
将myusername:pass"12<o保存到一个文件(例如auth.txt),然后通过@文件名的方式让curl读取认证内容:curl -k -u @auth.txt https://www.myurl.com/endpoint这种方式还能避免密码出现在命令行历史中,提升安全性。
内容的提问来源于stack exchange,提问作者Ymi
相关产品推荐
相关产品推荐

