V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
V2EX  ›  cURL

curl 将在版本 7.70 支持以 JSON 方式输出调试信息

  •  
  •   Livid · 2020-03-18 10:45:21 +08:00 · 5993 次点击
    这是一个创建于 1740 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://daniel.haxx.se/blog/2020/03/17/curl-write-out-json/

    例子如下:

    {
      "url_effective": "https://example.com/",
      "http_code": 200,
      "response_code": 200,
      "http_connect": 0,
      "time_total": 0.44054,
      "time_namelookup": 0.001067,
      "time_connect": 0.11162,
      "time_appconnect": 0.336415,
      "time_pretransfer": 0.336568,
      "time_starttransfer": 0.440361,
      "size_header": 347,
      "size_request": 77,
      "size_download": 1256,
      "size_upload": 0,
      "speed_download": 0.002854,
      "speed_upload": 0,
      "content_type": "text/html; charset=UTF-8",
      "num_connects": 1,
      "time_redirect": 0,
      "num_redirects": 0,
      "ssl_verify_result": 0,
      "proxy_ssl_verify_result": 0,
      "filename_effective": "saved",
      "remote_ip": "93.184.216.34",
      "remote_port": 443,
      "local_ip": "192.168.0.1",
      "local_port": 44832,
      "http_version": "2",
      "scheme": "HTTPS",
      "curl_version": "libcurl/7.69.2 GnuTLS/3.6.12 zlib/1.2.11 brotli/1.0.7 c-ares/1.15.0 libidn2/2.3.0 libpsl/0.21.0 (+libidn2/2.3.0) nghttp2/1.40.0 librtmp/2.3"
    }
    

    如果所有 Unix 工具都能这样用 JSON 格式输出信息就好了。

    26 条回复    2020-03-20 16:42:41 +08:00
    lisonfan
        1
    lisonfan  
       2020-03-18 10:49:34 +08:00
    有个 httpie
    wdytoya
        2
    wdytoya  
       2020-03-18 10:51:18 +08:00
    挺好的,小而美的优化
    chocotan
        3
    chocotan  
       2020-03-18 10:59:10 +08:00
    我一般在后面加 | jq
    onion83
        4
    onion83  
       2020-03-18 11:00:12 +08:00
    | jq +1
    langxuan
        5
    langxuan  
       2020-03-18 11:14:41 +08:00
    | jq + 2
    ifsclimbing
        6
    ifsclimbing  
       2020-03-18 11:19:40 +08:00 via iPhone
    是不是可以给所有命令加个前置 filter,处理结果成 json
    scriptB0y
        7
    scriptB0y  
       2020-03-18 12:13:50 +08:00
    @chocotan
    @onion83
    @langxuan

    不是一个东西,这个功能不是将 HTTP Response 输出格式化,是 curl 本身的调试信息以 json 输出。
    weixiangzhe
        8
    weixiangzhe  
       2020-03-18 12:24:33 +08:00
    我一般是用 fx
    curl xxxx | fx
    wujunze
        9
    wujunze  
       2020-03-18 12:44:11 +08:00
    jq +10086 挺方便的
    httpie 也不错 就是卡一点
    MeteorCat
        10
    MeteorCat  
       2020-03-18 12:52:53 +08:00 via Android
    这个可以呀,以后可以直接调用外部脚本 curl 批量保存嗅探网站的信息了
    hantsy
        11
    hantsy  
       2020-03-18 12:59:00 +08:00
    Windows 下 的 Curl 是啥版本,好多问题。
    不得不转到 Cygwin 下用。
    Maco
        12
    Maco  
       2020-03-18 13:11:45 +08:00
    curl xxx | | python -m json.tool
    Maco
        13
    Maco  
       2020-03-18 13:13:22 +08:00
    理解错了
    est
        14
    est  
       2020-03-18 15:07:14 +08:00
    然后你又需要一个命令行工具来解析 JSON 了。
    Narcissu5
        15
    Narcissu5  
       2020-03-18 22:10:08 +08:00
    有点好奇这种工具是谁在维护
    wangyzj
        16
    wangyzj  
       2020-03-18 23:35:54 +08:00
    jq 不错
    ps1aniuge
        17
    ps1aniuge  
       2020-03-19 00:36:30 +08:00
    linux 版 powershell:Invoke-WebRequest 网址
    直接返回对象,内有属性方法,不香么?可以代替大部分 curl 的需求。
    Jirajine
        18
    Jirajine  
       2020-03-19 12:59:30 +08:00 via Android
    @ps1aniuge 别逗了,你软自作聪明给 Invoke-WebRequest 默认搞得 wget 和 curl 两个别名不知道让包括楼上 @hantsy 在内的多少人满脸懵逼。
    littleshy
        19
    littleshy  
       2020-03-19 13:08:44 +08:00
    @Jirajine #18 哈哈。Powershell core 7 里好像把这两个别名去掉了。
    ps1aniuge
        20
    ps1aniuge  
       2020-03-19 14:31:02 +08:00
    @littleshy 哦这个我还没了解到,刚才试了下,果然如此。
    实际上我是建议有这两个别名的。

    psv7 中 curl,wget 还原大法=香!:
    ```
    new-alias -Name curl -Value Invoke-WebRequest ; new-alias -name wget -Value Invoke-WebRequest
    ```

    你要不想用 curl 别名,可以用 /usr/bin/curl 嘛。
    ps1aniuge
        21
    ps1aniuge  
       2020-03-19 14:41:21 +08:00
    mkdir -p ~/.config/powershell ;Add-Content -Path $profile -Value 'new-alias -Name curl -Value Invoke-WebRequest ; new-alias -name wget -Value Invoke-WebRequest'
    CallMeReznov
        22
    CallMeReznov  
       2020-03-19 14:54:52 +08:00
    帅 以后就不要在加 jq 了吗
    ChristopherWu
        23
    ChristopherWu  
       2020-03-19 15:09:47 +08:00
    我一直想做这样子的项目,用 json 将所有命令行工具都包装一遍。
    什么 ls,pwd,grep,top 都添加一个选项 --json-output ,可以输出 json,然后就可以用 jq 玩弄了。


    文本化输出时 unix 的一大败笔,没法洗。
    Jirajine
        24
    Jirajine  
       2020-03-19 15:10:50 +08:00 via Android
    @ps1aniuge @littleshy
    关键是,这个命令和 curl,wget 的行为都不同。
    习惯性地用 wget 下个文件,开始看起来正常,下完以后文件呢?
    和 curl 也是各种结果不一致,还会 following redirect。
    还有其他的各种灵异事件,cat 1.jpg > 2.jpg 出来一坨什么东西? nc 接管道收到的数据怎么和发的不一样? ls | grep xxx 怎么没效果?
    如此种种让不了解 PowerShell 的用户(没错,以前的我)满脸懵逼,实在忍无可忍去看 PowerShell 的文档,一看才知道怎一个坑字了得,自作聪明的内置别名,瞎胡闹的对象管道,用 git-bash 我都不想用它。
    ps1aniuge
        25
    ps1aniuge  
       2020-03-20 16:23:45 +08:00
    @Jirajine 同人,这个词了解一下。
    你可以不用,但不能不让别人,用同人继续演义。
    国家允许“王者荣耀”酒 ,参见 《腾讯状告国 a 家 b 版 c 权局》
    qq 车,
    还有什么小说, [异界岳不群] [魔界张三丰]
    你在百度搜的东西和谷歌搜的结果也不一样。

    结果不一致又如何呢?只有甜豆浆才是正宗?

    史上武值没有大郎那么矮,金莲也是娴妇。
    是不是把看金-屏-妹的邪书的都灭了?
    那么肮脏,那么不正能量,你还不是照样钻被窝看禁书。你咋不大义凛然呢?

    你,他,我,curl 作者,再做一个 [解析网址成 dom 对象版 curl] ,谁也做不成和 curl 结果完全一致。又何必强求 ps 项目呢。

    就算做成了和 curl 完全一致的,完全一致,那直接用 curl 得了。那不是没用么?
    ps1aniuge
        26
    ps1aniuge  
       2020-03-20 16:42:41 +08:00
    命令行解析网址,是一个学科。
    不同的人,有不同理解,

    先来的就是正宗么?如此说 ie 是正宗,chrome 应该被你抛弃。你 chrome 凭什么解析结果和 ie 不同?
    同理,
    上帝,圣母,谁更正宗,应该信谁???
    所以,
    希望大家看开些。
    最后,
    Invoke-WebReques 香不?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2621 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 06:43 · PVG 14:43 · LAX 22:43 · JFK 01:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.