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
相关产品推荐
相关产品推荐

