从 cpp 中的 curl 检索响应文本
Retrieving response text from curl in cpp
我们需要在 CPP 中接收来自 curl 的响应字符串,我尝试了以下选项,但没有任何 worked.js 使用 xhr.responseText 用于 this.I 在 cpp 中需要做的事情。
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
size_t realsize = size * nmemb;
const char* sp = static_cast<const char*>(contents);
readBuffer.append(sp, realsize);
return realsize;
}
CURLcode res;
char* http_error= new char[100];
readBuffer.clear();
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
CURLcode code(CURLE_FAILED_INIT);
code = curl_easy_perform(curl);
cout << "Curl response msg CURLOPT_WRITEDATA: "<<curl_easy_strerror(code)<< " respose :"<<readBuffer;
res=curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code) ;
cout << "Curl response msg: "<< curl_easy_strerror(res);
将您的 WriteCallback
函数更改为:
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* userp) {
userp->append((char*) contents, size * nmemb);
return size * nmemb;
}
请记住,您将 &readBuffer
作为 CURL_WRITEDATA
选项传递。这显示为 WriteCallback
中的第四个参数。由于 &readBuffer
的类型是 std::string*
,您可以将其用作回调中的签名。
此外,由于它是 std::string*
而不是 std::string
,您必须通过指针访问 append
,因此 ->
而不是 .
.在 curl_easy_perform
之后,readBuffer
应该保留来自 curl 请求的响应。
要获取响应代码,您可以在发出请求后获取它:
long http_code;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);
我们需要在 CPP 中接收来自 curl 的响应字符串,我尝试了以下选项,但没有任何 worked.js 使用 xhr.responseText 用于 this.I 在 cpp 中需要做的事情。
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
size_t realsize = size * nmemb;
const char* sp = static_cast<const char*>(contents);
readBuffer.append(sp, realsize);
return realsize;
}
CURLcode res;
char* http_error= new char[100];
readBuffer.clear();
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
CURLcode code(CURLE_FAILED_INIT);
code = curl_easy_perform(curl);
cout << "Curl response msg CURLOPT_WRITEDATA: "<<curl_easy_strerror(code)<< " respose :"<<readBuffer;
res=curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code) ;
cout << "Curl response msg: "<< curl_easy_strerror(res);
将您的 WriteCallback
函数更改为:
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* userp) {
userp->append((char*) contents, size * nmemb);
return size * nmemb;
}
请记住,您将 &readBuffer
作为 CURL_WRITEDATA
选项传递。这显示为 WriteCallback
中的第四个参数。由于 &readBuffer
的类型是 std::string*
,您可以将其用作回调中的签名。
此外,由于它是 std::string*
而不是 std::string
,您必须通过指针访问 append
,因此 ->
而不是 .
.在 curl_easy_perform
之后,readBuffer
应该保留来自 curl 请求的响应。
要获取响应代码,您可以在发出请求后获取它:
long http_code;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);