V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zhoudaiyu
V2EX  ›  Linux

今天遇到了一个 curl 的问题,感觉有点坑

  •  
  •   zhoudaiyu · 2021-04-30 17:19:19 +08:00 · 3963 次点击
    这是一个创建于 1336 天前的主题,其中的信息可能已经有所发展或是发生改变。

    把今天遇到的一个实际问题简化一下,命令是: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 条附言  ·  2021-04-30 18:49:11 +08:00
    不是我干的,不是我干的,不是我干的。。。是我被派单看了一下而已。。。
    34 条回复    2021-05-08 14:25:20 +08:00
    CloudMx
        1
    CloudMx  
       2021-04-30 17:20:50 +08:00   ❤️ 13
    确实是你太菜导致了...
    keepeye
        2
    keepeye  
       2021-04-30 17:26:21 +08:00   ❤️ 1
    你不知道 & 在 linux 下是关键字吗?以及 &&
    keepeye
        3
    keepeye  
       2021-04-30 17:26:50 +08:00
    bash shell
    nannanziyu
        4
    nannanziyu  
       2021-04-30 17:29:36 +08:00
    ?和&需要转义
    curl www.baidu.com/a/\?expire=2\&token=3
    AstroProfundis
        5
    AstroProfundis  
       2021-04-30 17:30:49 +08:00
    url 用引号包起来就行了
    dalei
        6
    dalei  
       2021-04-30 17:32:50 +08:00
    真的是你的问题。
    learningman
        7
    learningman  
       2021-04-30 17:33:38 +08:00
    是你太菜了,不管是 cmd,powershell 还是 bash,&都是保留字
    madpecker009
        8
    madpecker009  
       2021-04-30 17:34:30 +08:00
    @CloudMx 我就喜欢这样的评论
    zhoudaiyu
        9
    zhoudaiyu  
    OP
       2021-04-30 17:39:05 +08:00
    @CloudMx #1
    @keepeye #2
    @keepeye #3
    @nannanziyu #4
    @AstroProfundis #5
    @dalei #6
    @learningman #7
    @madpecker009 #8 冤枉啊冤枉啊!是我的领导问的我,他想了+试了一下午没搞定然后问我,我想了 2 分钟试了一下告诉他了。。
    pepesii
        10
    pepesii  
       2021-04-30 17:42:14 +08:00   ❤️ 1
    @zhoudaiyu #9 哈哈,帮我转达给你领导,他太菜了
    zhoudaiyu
        11
    zhoudaiyu  
    OP
       2021-04-30 17:49:12 +08:00 via iPhone
    @pepesii PUA 警告⚠️
    firebroo
        12
    firebroo  
       2021-04-30 17:51:59 +08:00
    确实是你太菜导致了...
    ch2
        13
    ch2  
       2021-04-30 18:01:02 +08:00
    一般字符串都要加引号
    HenryGe
        14
    HenryGe  
       2021-04-30 18:03:22 +08:00
    curl 百度要加 UA header, 不然会被拒。
    deplives
        15
    deplives  
       2021-04-30 18:27:18 +08:00 via iPhone
    那可确实是你太菜了
    zhoudaiyu
        16
    zhoudaiyu  
    OP
       2021-04-30 19:06:46 +08:00
    @firebroo #12
    @ch2 #13
    @HenryGe #14
    @deplives #15 我承认,我想了 2 分钟,确实还是菜🤣,应该立马想到才对
    hljjhb
        17
    hljjhb  
       2021-04-30 20:23:20 +08:00
    @zhoudaiyu 「 curl 把我的命令给转化为」,其实是看你找的原因不对😂
    GuuJiang
        18
    GuuJiang  
       2021-04-30 20:32:11 +08:00 via iPhone
    @zhoudaiyu 你执行下 fg 命令还会有新的惊喜
    zhoudaiyu
        19
    zhoudaiyu  
    OP
       2021-04-30 20:40:33 +08:00
    @hljjhb #17 那是?
    love
        20
    love  
       2021-04-30 20:42:54 +08:00
    命令行参数有一大堆符号加单引号是基本操作,否则可能有不可测效果(并不是只有&是 bash 特殊字符
    aflow
        21
    aflow  
       2021-04-30 20:44:32 +08:00
    直接写 curl 命令有点不方便,我都是用 postman 写完导出为 curl 命令的
    hljjhb
        22
    hljjhb  
       2021-04-30 21:25:19 +08:00
    zhoudaiyu
        23
    zhoudaiyu  
    OP
       2021-04-30 21:48:01 +08:00 via iPhone
    @hljjhb 明白了 感谢!
    zhoudaiyu
        24
    zhoudaiyu  
    OP
       2021-04-30 21:48:10 +08:00 via iPhone
    @aflow 图省事了
    zhoudaiyu
        25
    zhoudaiyu  
    OP
       2021-04-30 21:48:21 +08:00 via iPhone
    @GuuJiang 明白了老哥 谢谢
    BrettD
        26
    BrettD  
       2021-05-01 01:56:52 +08:00
    不是 curl 给你转换的,是 shell 给你转换的,curl 自己收到的命令就已经是转换后的了
    laoyur
        27
    laoyur  
       2021-05-01 08:09:36 +08:00 via Android
    append 甩锅也没用,看你帖文,你跟你老板差不多菜,哈哈哈
    imycc
        28
    imycc  
       2021-05-01 09:49:27 +08:00
    用 zsh 你一个一个命令敲的话,会给你自动补齐一个转移的。但是直接张贴就不行了。。之前也经常犯错,然后养成习惯加个引号包起来
    aloxaf
        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
    liuxing
        30
    liuxing  
       2021-05-04 21:55:22 +08:00
    哈哈哈 今天刚写了个 Curl 使用指南

    v2 链接: https://v2ex.com/t/774907
    原文链接: https://www.liuxing.io/blog/curl/
    zhoudaiyu
        31
    zhoudaiyu  
    OP
       2021-05-04 22:21:16 +08:00 via iPhone
    @liuxing 我太菜了 感觉好多 curl 的高级用法都不会😭
    julyclyde
        32
    julyclyde  
       2021-05-08 14:22:17 +08:00
    其实并不是 curl token=3 而是直接就 token=3 了

    关于 curl 和&符号,前几年我见过 100 万美元的大事故
    zhoudaiyu
        33
    zhoudaiyu  
    OP
       2021-05-08 14:23:09 +08:00
    @julyclyde #32 愿闻其详
    julyclyde
        34
    julyclyde  
       2021-05-08 14:25:20 +08:00
    @zhoudaiyu 就是当时 curl 访问的是一个“命令”而不是“数据”
    因为给的 querystring 里&符号的问题,等于说给命令少了一个参数,变成另一个意思了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1337 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:36 · PVG 01:36 · LAX 09:36 · JFK 12:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.