如何解决libcurl启用WebSocket支持时出现的CURLE_UNSUPPORTED_PROTOCOL错误
解决libcurl使用WebSocket时的CURLE_UNSUPPORTED_PROTOCOL错误
libcurl的WebSocket支持属于可选编译特性,默认发行版包(包括Ubuntu的libcurl4-openssl-dev、vcpkg默认安装的libcurl)通常未开启该特性,这是导致CURLE_UNSUPPORTED_PROTOCOL错误的核心原因。以下是针对不同环境的解决步骤:
Ubuntu 24.04环境处理
- 检查当前libcurl的WebSocket支持状态:
执行curl -V,查看输出的Features字段,若没有WebSocket字样,说明当前库不支持WebSocket。 - 从源码编译带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
相关产品推荐
相关产品推荐

