【发布时间】:2014-06-27 10:36:23
【问题描述】:
我正在尝试使用 C++ cURL 库通过 PUT 方法发送 Json 数据,我的代码看起来像这样
CURL* m_curlHandle;
CURLcode m_returnValue;
//function1 start
curl_global_init(CURL_GLOBAL_ALL);
struct curl_slist* headers = NULL;
std::ostringstream oss;
struct curl_slist* slist = NULL;
slist = curl_slist_append(headers, "Accept: application/json");
slist = curl_slist_append(headers, "Content-Type: application/json");
slist = curl_slist_append(headers, "charsets: utf-8");
m_curlHandle = curl_easy_init();
if (!m_curlHandle)
// throw exception
curl_easy_setopt(m_curlHandle, CURLOPT_HTTPHEADER, headers);
//function1 end
//function2 start
std::string url = "some URL"; // my url
curl_easy_setopt(m_curlHandle, CURLOPT_URL, url.c_str());
unsigned int timeout = 5;
curl_easy_setopt(m_curlHandle, CURLOPT_TIMEOUT, timeout);
std::string localIp = "some IP"; // my IP address
curl_easy_setopt(m_curlHandle, CURLOPT_INTERFACE, localIp.c_str());
curl_easy_setopt(m_curlHandle, CURLOPT_CUSTOMREQUEST, "PUT");
std::string json = "some json struct"; //my json struct
curl_easy_setopt(m_curlHandle, CURLOPT_POSTFIELDS, json.c_str());
curl_easy_setopt(m_curlHandle, CURLOPT_WRITEFUNCTION, callbackWriter); //static size_t callbackWriter(char* buffer, size_t size, size_t nmemb, void* userp);
m_returnValue = curl_easy_perform(m_curlHandle);
//function2 end
我调用 function1 然后调用 function2,问题是对于所有 curl_easy_setopt 调用,我得到错误代码 1685083487 和错误描述“未知错误”。那么什么可能导致这样的结果以及如何解决这个问题?
提前谢谢你!
【问题讨论】:
-
仅从成员变量名来看,这是一个包装对象的成员函数。如果所述对象是按值传递或以其他方式隐式或显式复制,并且没有正确管理复制语义,并且您的破坏者关闭
m_curlHandle,则任何按值复制将持有无效的m_curlHandle。尝试使用它会失败。我的建议:将类 copy-ctor 声明为已删除,重新编译并修复任何中断。 -
@WhozCraig 你是对的,这些是包装类的成员函数,但它是一个单例,所以该类只有一个对象。