Как правильно отправить данные через 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();
}

Ответы (0 шт):