【发布时间】:2016-10-18 12:54:27
【问题描述】:
我在 Visual C++ curl 指针中使用 cURL 共享给一个函数。 setData 函数被编码发送到服务器,但没有函数没有编码问题。为什么会有这样的问题?
来源:
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
void setData(CURL *curl) // bad working (encoded sent fields...)
{
string fields = "{\"daa\": \"a\"}";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, fields.c_str());
}
void setUrl(CURL* curl) // good working
{
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
}
int main()
{
CURL *curl;
CURLcode res;
string readBuffer;
curl = curl_easy_init();
struct curl_slist *list = NULL;
list = curl_slist_append(list, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
setUrl(curl);
setData(curl);
res = curl_easy_perform(curl);
cout << readBuffer;
getchar();
return 0;
}
【问题讨论】:
-
从未将其用作库。但只是检查手册页。您是否尝试过
CURLOPT_COPYPOSTFIELDS而不是CURLOPT_POSTFIELDS? -
手册中的更多内容......您可能还需要一个
CURLOPT_POSTFIELDSIZEsetter。但也许不是,因为它是一个零终止的 c_str -
@infixed 您的解决方案现在尝试工作。谢谢。