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
<>在C++字符串中有类型^ ^ {CD2>}(实际上不正确,但现在足够接近)这是C的遗留物。^ {< CD5>}类型不同。如果有一个C++字符串,但需要调用一个需要遗留C字符串的函数,则使用^ {CD6}}。p>curl_easy_setopt(curl, CURLOPT_POSTFIELDS, ...);
需要一个char*
作为它的参数,您在第一个exmaple中给出了这个参数,但在第二个exmaple中没有。试试curl_easy_setopt(curl, CURLOPT_POSTFIELDS, body.c_str());
curl_easy_setopt
是一个具有类C接口的函数,该接口使用“可变参数”,因为这些参数的类型取决于所设置的选项这意味着它不是类型安全的。您的编译器无法检测您何时使用了错误的类型,正如您在这里所做的那样^{} wants a ^{} (指向某个^ {{CD4}}s)的指针,而不是^ { }(复杂C++类类型)。
因此,您不应该传递
std::string
,也不清楚您认为应该传递的原因,因为文档清楚地表明char*
是预期的但是,您至少应该收到编译器发出的关于通过可变模板传递非POD的警告。打开警告,阅读文档
相关问题 更多 >
编程相关推荐