Linux curl,https get 地址里有特殊字符怎么处理

xiaoxiao_0223 2014-10-25 06:38:57
我想用https取192.168.1.23上的一个名为 \~_!@$^&*.xml 的文件,我用下面的方法取不到,请问下大神们,这样有特殊字符的文件要怎么取?
curl --data-urlencode "\\~\_\!\@\$\^\&\*.xml" --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest https://192.168.1.23:443/bmsc/\\\~\_\!\@\$\^\&\*.xml
Warning: Couldn't read data from file "\~\_\!\@$\^\&\*.xml", this makes an
Warning: empty POST.
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
...全文
3926 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljc007 2014-10-29
  • 打赏
  • 举报
回复
引用 5 楼 xiaoxiao_0223 的回复:
这个含特殊字符的URL解析不了,主要是因为有了一个反斜杠在里面,当没有反斜杠时是可以正常 get的,最后找到了解决的方法,不过是个比较笨的方法,命令是这样的,用 反斜杠 encode的值代替 加到URL里面: curl -v -G --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest https://MPD-IS-01:443/bmsc/%5C\~_\!\@\$\^\&\*%23.xml -o sa003.xml 这里没有再用 --data-urlencode 这个参数了,因为 --data-urlencode后会在你的URL后面会多出一个问号:?;而是直接先将"\\" encode,方法如下: curl -v -G --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest https://MPD-IS-01:443/bmsc/ --data-urlencode "\\" 用上面的命令可以得到"\\"的 Unicode编码,会在命令下直接打出来的,能看到是"%5C",得到这个值后,直接替换URL里面的反斜杠就好了。
如果没有其它问题,请点击左上角“结帖”按钮。
xiaoxiao_0223 2014-10-27
  • 打赏
  • 举报
回复
引用 4 楼 lishanchao 的回复:
[quote=引用 3 楼 xiaoxiao_0223 的回复:] 非特殊字符的是OK的。 “ 建议最后的URL用引号引起来: https://192.168.1.23:443/bmsc/\\\~\_\!\@\$\^\&\*.xml ” 是这样吗: curl --data-urlencode "\\~\_\!\@\$\^\&\*.xml" --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest “https://192.168.1.23:443/bmsc/\\\~\_\!\@\$\^\&\*.xml ”
注意中英文,最好用单引号,双引号的话Shell还是会解析的。[/quote] 这个含特殊字符的URL解析不了,主要是因为有了一个反斜杠在里面,当没有反斜杠时是可以正常 get的,最后找到了解决的方法,不过是个比较笨的方法,命令是这样的,用 反斜杠 encode的值代替 加到URL里面: curl -v -G --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest https://MPD-IS-01:443/bmsc/%5C\~_\!\@\$\^\&\*%23.xml -o sa003.xml 这里没有再用 --data-urlencode 这个参数了,因为 --data-urlencode后会在你的URL后面会多出一个问号:?;而是直接先将"\\" encode,方法如下: curl -v -G --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest https://MPD-IS-01:443/bmsc/ --data-urlencode "\\" 用上面的命令可以得到"\\"的 Unicode编码,会在命令下直接打出来的,能看到是"%5C",得到这个值后,直接替换URL里面的反斜杠就好了。
沭水河畔 2014-10-27
  • 打赏
  • 举报
回复
引用 3 楼 xiaoxiao_0223 的回复:
非特殊字符的是OK的。 “ 建议最后的URL用引号引起来: https://192.168.1.23:443/bmsc/\\\~\_\!\@\$\^\&\*.xml ” 是这样吗: curl --data-urlencode "\\~\_\!\@\$\^\&\*.xml" --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest “https://192.168.1.23:443/bmsc/\\\~\_\!\@\$\^\&\*.xml ”
注意中英文,最好用单引号,双引号的话Shell还是会解析的。
xiaoxiao_0223 2014-10-27
  • 打赏
  • 举报
回复
非特殊字符的是OK的。 “ 建议最后的URL用引号引起来: https://192.168.1.23:443/bmsc/\\\~\_\!\@\$\^\&\*.xml ” 是这样吗: curl --data-urlencode "\\~\_\!\@\$\^\&\*.xml" --cacert /var/ca-pem/ca-bundle-for-cdn.pem --digest “https://192.168.1.23:443/bmsc/\\\~\_\!\@\$\^\&\*.xml ”
沭水河畔 2014-10-26
  • 打赏
  • 举报
回复
建议最后的URL用引号引起来: https://192.168.1.23:443/bmsc/\\\~\_\!\@\$\^\&\*.xml
awsqsh 2014-10-25
  • 打赏
  • 举报
回复
先试试非特殊字符是否OK;如果OK,那应该就是url encode的问题了。

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧