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

C++使用curlpp调用加拿大统计局POST接口无返回如何解决?

问题原因
  • 接口返回415状态码代表不支持的媒体类型,你当前代码使用multipart/form-data格式提交请求,但加拿大统计局的REST接口要求请求体必须是application/json格式,服务端无法识别你提交的表单内容所以返回错误。
  • 你构造的请求参数格式不符合接口要求:该接口要求传入JSON数组格式的参数,每个元素包含vectorID(数值类型)和latestN(数值类型)两个字段,你用curlpp::Forms构造的表单键值对完全不符合接口参数规范。
修复方案

你需要调整代码构造JSON格式的请求体,同时指定正确的请求头,修改后的参考代码如下:

#include <iostream>
#include <curlpp/cURLpp.hpp>
#include <curlpp/Easy.hpp>
#include <curlpp/Options.hpp>

int main()
{
    curlpp::Cleanup cleanup;
    curlpp::Easy request;

    // 接口地址
    request.setOpt(curlpp::options::Url("https://www150.statcan.gc.ca/t1/wds/rest/getDataFromVectorsAndLatestNPeriods"));
    request.setOpt(curlpp::options::Verbose(true));

    // 构造符合要求的JSON请求体
    std::string json_body = "[{\"vectorID\": 54325508, \"latestN\": 1}]";
    request.setOpt(curlpp::options::PostFields(json_body));
    request.setOpt(curlpp::options::PostFieldSize(json_body.size()));

    // 设置正确的Content-Type请求头
    std::list<std::string> headers;
    headers.push_back("Content-Type: application/json");
    request.setOpt(curlpp::options::HttpHeader(headers));

    // 输出返回结果到控制台
    request.setOpt(curlpp::options::WriteStream(&std::cout));

    request.perform();

    return 0;
}

编译命令和原有命令一致即可:
g++ -std=gnu++11 -lcurl -lcurlpp cry.cpp -o cry

内容的提问来源于stack exchange,提问作者Anthony Lin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:36:04