C++使用Poco库发送无请求体GET请求无法获取Binance接口响应
问题原因
现有代码无法正常获取响应的核心问题如下:
- 目标接口为HTTPS协议,原代码使用的
Poco::Net::HTTPClientSession仅支持明文HTTP传输,无法完成TLS握手,必须替换为支持SSL的Poco::Net::HTTPSClientSession并初始化SSL上下文。 - 代码获取到响应体输入流后未执行读取操作,无法拿到返回的JSON内容。
- 输出使用的
cout未加std::命名空间限定,会直接触发编译错误。 - 请求未携带
Host头,部分服务端会拦截缺失该字段的请求。
修正后完整代码
#include <iostream> #include <string> #include <sstream> #include <Poco/URI.h> #include <Poco/Net/HTTPSClientSession.h> #include <Poco/Net/HTTPRequest.h> #include <Poco/Net/HTTPResponse.h> #include <Poco/Net/SSLManager.h> #include <Poco/Net/Context.h> #include <Poco/Net/AcceptCertificateHandler.h> int main() { // 初始化SSL客户端环境 Poco::Net::initializeSSL(); Poco::SharedPtr<Poco::Net::InvalidCertificateHandler> certHandler = new Poco::Net::AcceptCertificateHandler(false); Poco::Net::Context::Ptr sslContext = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, ""); Poco::Net::SSLManager::instance().initializeClient(nullptr, certHandler, sslContext); // 解析目标地址 Poco::URI uri("https://api.binance.com/api/v3/time"); // 创建HTTPS客户端会话 Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), sslContext); // 构造GET请求,补充必填Host头 Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_GET, uri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1); request.setHost(uri.getHost()); // 发送请求 session.sendRequest(request); // 接收响应头 Poco::Net::HTTPResponse response; std::istream& resStream = session.receiveResponse(response); // 打印响应状态码 200即为请求成功 std::cout << "响应状态码: " << response.getStatus() << std::endl; // 读取完整响应体 std::stringstream resBuffer; resBuffer << resStream.rdbuf(); std::string resBody = resBuffer.str(); std::cout << "返回内容: " << resBody << std::endl; // 释放SSL资源 Poco::Net::uninitializeSSL(); return 0; }
编译与使用说明
- 编译时需要链接对应依赖库,g++编译命令参考:
g++ binance_time.cpp -o binance_time -lPocoNet -lPocoNetSSL -lPocoCrypto -lPocoFoundation -lssl -lcrypto -lpthread - 请求成功后返回格式如下,
serverTime字段即为币安服务器的毫秒级Unix时间戳:
{"serverTime":1718260000000}
- 如需提取时间字段,引入任意JSON解析库读取对应键值即可,该接口不需要携带任何认证参数。
内容的提问来源于stack exchange,提问作者Remì1998
相关产品推荐
相关产品推荐

