【问题标题】:Curl websockets卷曲网络套接字
【发布时间】:2022-01-09 21:21:24
【问题描述】:

我正在编写一个 bash 脚本。我需要从我的 esp32 上的 websocket 获取数据。我需要从传感器中获取价值。问题是有时我在发送请求时无法正确连接。

flow_value_raw=$(timeout 1s \
        curl \
        --no-buffer \
        --header "Connection: Upgrade" \
        --header "Upgrade: websocket" \
        --header "Host: $ip$port/$flow" \
        --header "Origin: http://$ip$port/$flow" \
        --header "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" \
        --header "Sec-WebSocket-Version: 13" \
        http://$ip:$port/$flow 2>/dev/null) 
        flow_value_raw=${flow_value_raw:2}

通过这种方式,我每秒触发一次 curl,但很多时候我从 curl 中一无所获。有什么方法可以告诉 curl 从响应中获取一个值?如果我只使用 curl 而没有超时,我会得到多个响应。

【问题讨论】:

    标签: bash curl websocket


    【解决方案1】:

    我不完全确定你的意思或寻求什么。

    所以我正在尝试回应

    我可以告诉 curl 只从响应中获取一个值

    条件为truewhile 循环将无限期地继续。无限循环

    curl 的输出保存在flow_value_raw

    if [ -n "${flow_value_raw} ] 检查字符串变量是否非空 - 如果非空,即 curl 输出的值,break 退出无限循环 - 否则 sleep1 秒并重复

    while true; do
        local flow_value_raw=$(timeout 1 curl ...args)
        if [ -n "${flow_value_raw}" ]; then
          break
        else
          sleep 1
        fi
    done
    

    PS 来自man timeout

    启动 COMMAND,如果在 DURATION 后仍在运行,则将其终止。

    【讨论】:

      猜你喜欢
      • 2018-02-03
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多