如何在cpp中使用libcurl将字符串传递给RESTAPI

2024-10-02 00:23:31 发布

您现在位置:Python中文网/ 问答频道 /正文

< >我想把字符串发送到C++中的REST API调用。所以,我使用的是libcurl库

CURL *curl;
CURLcode res;

curl = curl_easy_init();
if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "localhost:5000/sample");
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"hi\" : \"there\"}");
    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);

    std::cout << res << std::endl;
}

烧瓶API的O/p为

ImmutableMultiDict([('{"hi" : "there"}', '')])

上述代码正在运行:

我正在python Flask应用程序中获得发送结果

但是,

string body = "{\"hi\" : \"there\"}";
CURL *curl;
CURLcode res;

curl = curl_easy_init();
if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "localhost:5000/sample");
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body);
    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);

    std::cout << res << std::endl;
}

烧瓶API的O/p为:

ImmutableMultiDict([('��-ؿ\x7f', '')])

此代码不起作用。唯一的区别是我将字符串赋给一个变量,并将其传递给curl

我想知道它为什么起作用? 如何将变量传递给curl


Tags: 字符串apiurlifiniteasyrescurl
2条回答

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, ...);需要一个char*作为它的参数,您在第一个exmaple中给出了这个参数,但在第二个exmaple中没有。试试curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body.c_str());

<>在C++字符串中有类型^ ^ {CD2>}(实际上不正确,但现在足够接近)这是C的遗留物。^ {< CD5>}类型不同。如果有一个C++字符串,但需要调用一个需要遗留C字符串的函数,则使用^ {CD6}}。p>

curl_easy_setopt是一个具有类C接口的函数,该接口使用“可变参数”,因为这些参数的类型取决于所设置的选项

这意味着它不是类型安全的。您的编译器无法检测您何时使用了错误的类型,正如您在这里所做的那样^{} wants a ^{}(指向某个^ {{CD4}}s)的指针,而不是^ { }(复杂C++类类型)。

因此,您不应该传递std::string,也不清楚您认为应该传递的原因,因为文档清楚地表明char*是预期的

但是,您至少应该收到编译器发出的关于通过可变模板传递非POD的警告。打开警告,阅读文档

相关问题 更多 >

    热门问题