把今天遇到的一个实际问题简化一下,命令是:curl www.baidu.com/a/?expire=2&token=3,其中查询参数里面的 token 是必须有的,否则对方会报 403 。然后执行后发现居然响应是 403 ?加上 -vvv 看了一下,原来 curl 把我的命令给转化为了 curl www.baidu.com/a/?expire=2 & curl token=3,把 url 加引号后就正常了,也就是 curl "www.baidu.com/a/?expire=2&token=3"。感觉有点坑,也可能是我太菜了不知道这个。。。
1
CloudMx 2021-04-30 17:20:50 +08:00 13
确实是你太菜导致了...
|
2
keepeye 2021-04-30 17:26:21 +08:00 1
你不知道 & 在 linux 下是关键字吗?以及 &&
|
3
keepeye 2021-04-30 17:26:50 +08:00
bash shell
|
4
nannanziyu 2021-04-30 17:29:36 +08:00
?和&需要转义
curl www.baidu.com/a/\?expire=2\&token=3 |
5
AstroProfundis 2021-04-30 17:30:49 +08:00
url 用引号包起来就行了
|
6
dalei 2021-04-30 17:32:50 +08:00
真的是你的问题。
|
7
learningman 2021-04-30 17:33:38 +08:00
是你太菜了,不管是 cmd,powershell 还是 bash,&都是保留字
|
8
madpecker009 2021-04-30 17:34:30 +08:00
@CloudMx 我就喜欢这样的评论
|
9
zhoudaiyu OP @CloudMx #1
@keepeye #2 @keepeye #3 @nannanziyu #4 @AstroProfundis #5 @dalei #6 @learningman #7 @madpecker009 #8 冤枉啊冤枉啊!是我的领导问的我,他想了+试了一下午没搞定然后问我,我想了 2 分钟试了一下告诉他了。。 |
12
firebroo 2021-04-30 17:51:59 +08:00
确实是你太菜导致了...
|
13
ch2 2021-04-30 18:01:02 +08:00
一般字符串都要加引号
|
14
HenryGe 2021-04-30 18:03:22 +08:00
curl 百度要加 UA header, 不然会被拒。
|
15
deplives 2021-04-30 18:27:18 +08:00 via iPhone
那可确实是你太菜了
|
16
zhoudaiyu OP |
20
love 2021-04-30 20:42:54 +08:00
命令行参数有一大堆符号加单引号是基本操作,否则可能有不可测效果(并不是只有&是 bash 特殊字符
|
21
aflow 2021-04-30 20:44:32 +08:00
直接写 curl 命令有点不方便,我都是用 postman 写完导出为 curl 命令的
|
22
hljjhb 2021-04-30 21:25:19 +08:00
|
26
BrettD 2021-05-01 01:56:52 +08:00
不是 curl 给你转换的,是 shell 给你转换的,curl 自己收到的命令就已经是转换后的了
|
27
laoyur 2021-05-01 08:09:36 +08:00 via Android
append 甩锅也没用,看你帖文,你跟你老板差不多菜,哈哈哈
|
28
imycc 2021-05-01 09:49:27 +08:00
用 zsh 你一个一个命令敲的话,会给你自动补齐一个转移的。但是直接张贴就不行了。。之前也经常犯错,然后养成习惯加个引号包起来
|
29
aloxaf 2021-05-01 15:45:32 +08:00
@imycc 原生 zsh 不会自动补转义符吧?粘贴时自动转义倒是确实有:
autoload -Uz bracketed-paste-url-magic zle -N bracketed-paste bracketed-paste-url-magic |
30
liuxing 2021-05-04 21:55:22 +08:00
|
32
julyclyde 2021-05-08 14:22:17 +08:00
其实并不是 curl token=3 而是直接就 token=3 了
关于 curl 和&符号,前几年我见过 100 万美元的大事故 |