Как правильно отправить данные через POSTFIELDS при помощи CURL?
Как правильно отправить данные через POSTFIELDS при помощи CURL? Если написать тот же самый код на Python, то он будет работать и сайт выдаёт ответ 200, но на C++ выдаёт ответ 400. Как я понял, проблема в postfields, хотя могу ошибаться
#include <iostream>
#include <curl/curl.h>
size_t writeCallback(void* contents, size_t size, size_t nmemb, std::string* data) {
data->append((char*)contents, size * nmemb);
return size * nmemb;
}
int main() {
setlocale(LC_CTYPE, "ru_RU.UTF-8");
curl_global_init(CURL_GLOBAL_ALL);
CURL* curl;
CURLcode res;
std::string text;
struct curl_slist* list = NULL;
list = curl_slist_append(list, "X-Requested-With: XMLHttpRequest");
list = curl_slist_append(list, "Cookie: __ddg2_=0");
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &text);
curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
res = curl_easy_perform(curl);
if (res != CURLE_OK)
return 1;
std::string token = text.erase(0, text.find("<input type=\"hidden\" name=\"_xfToken\" value=\"") + 44);
token = token.erase(token.find("\""), token.size());
text = "";
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, "_xfToken=" + token + "&server=ru&id=26");
res = curl_easy_perform(curl);
if (res != CURLE_OK)
return 2;
curl_easy_cleanup(curl);
}
curl_global_cleanup();
}