You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决libcurl启用WebSocket支持时出现的CURLE_UNSUPPORTED_PROTOCOL错误

解决libcurl使用WebSocket时的CURLE_UNSUPPORTED_PROTOCOL错误

libcurl的WebSocket支持属于可选编译特性,默认发行版包(包括Ubuntu的libcurl4-openssl-dev、vcpkg默认安装的libcurl)通常未开启该特性,这是导致CURLE_UNSUPPORTED_PROTOCOL错误的核心原因。以下是针对不同环境的解决步骤:

Ubuntu 24.04环境处理

  1. 检查当前libcurl的WebSocket支持状态:
    执行curl -V,查看输出的Features字段,若没有WebSocket字样,说明当前库不支持WebSocket。
  2. 从源码编译带WebSocket支持的libcurl:
    • 安装编译依赖:
      sudo apt update && sudo apt install build-essential libssl-dev zlib1g-dev libnghttp2-dev
      
    • 下载对应版本的libcurl源码,解压后进入目录执行:
      ./configure --enable-websockets --with-openssl --with-zlib --with-nghttp2
      make -j$(nproc)
      sudo make install
      
    • 编译你的程序时,通过-L/usr/local/lib -lcurl指定链接新安装的libcurl库。

Windows vcpkg环境处理

vcpkg的libcurl默认未启用WebSocket特性,需要指定特性安装:

vcpkg install libcurl[websockets,schannel,zlib]

安装完成后,重新编译你的程序,确保使用带WebSocket支持的libcurl库。

验证支持状态

运行测试代码时,curl_version()的输出会包含Features列表,确认其中存在WebSocket字样,说明库已支持WebSocket协议。

复现错误的测试代码

#include <stdio.h>
#include <curl/curl.h>
int main()
{
  printf("Version: %s\n", curl_version());

  CURLcode res;
  CURL *curl = curl_easy_init();

  curl_easy_setopt(curl, CURLOPT_URL, "wss://example.com");
  curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 2L); /* websocket style */

  res = curl_easy_perform(curl);
  printf("curl_easy_perform: %d %s\n", res, curl_easy_strerror(res));
  curl_easy_cleanup(curl);
}

内容的提问来源于stack exchange,提问作者Fire Lancer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:05:01