C ++ CURL Json запрос на дискредитацию API для публикации сообщений - PullRequest
2 голосов
/ 04 апреля 2019

Я настраиваю библиотеку C ++ для API-интерфейса Discord, однако у меня возникают некоторые проблемы.

Мне нужно сделать (защищенный, поэтому httpS-запрос) на Discord, которым я управлялделать в Python без проблем.

basic_auth_headers = {
    "Authorization": f"Bot {TOKEN}",
    "Content-Type": "application/json"
}

channel_id = 562636135428521986
send_url = f"https://discordapp.com/api/v6/channels/{channel_id}/messages"
data = {
  "content": "Hello, World!",
  "tts": False,
   "embed": {
     "title": "Hello, Embed!",
     "description": "This is an embedded message."
   }
}

response = requests.post(send_url, json=data, headers=basic_auth_headers)

Все идет хорошо, он отправляет сообщение в чате.

Но потом, когда мне нужно перенести его на C ++, я не имею понятияс чего начать.

            auto h = get_basic_header();
            h.push_back("Content-Type: application/json");
            json j = json(
                {
                    {"content", "Hello, World!"},
                    {"tts", false},
                    {"embed", {
                        {"title", "Hello, Embed!"},
                        {"description", "This is an embedded message."}
                        } 
                    }
                }
            );
            CURL* curl;
            CURLcode res;
            struct curl_slist* headers = NULL;
            for (auto& each : h){
                headers = curl_slist_append(headers, each.c_str());
            }
            curl = curl_easy_init();
            curl_easy_setopt(curl, CURLOPT_URL, "https://google.com/");
            curl_easy_setopt(curl, CURLOPT_HTTPPOST, 1);
            res = curl_easy_perform(curl);

            curl_easy_cleanup(curl);

        std::string get_channel_link(long id){
            return "https://discordapp.com/api/v6/channels/" + std::to_string(id) + "/messages";
        }

        std::list<std::string> get_basic_header() {
            return { "Authorization: Bot " + token };
        }

Буду признателен за помощь, заранее спасибо.

РЕДАКТИРОВАТЬ: токен мой токен бота, не могу поделиться этим.

1 Ответ

0 голосов
/ 05 апреля 2019

cURL использует функцию обратного вызова для чтения / записи тела сообщения, которое вы отправляете / получаете.

Итак, вы (по крайней мере обычно) вызываете curl_easy_setopt с параметром CURLOPT_READFUNCTION, чтобы установить функцию чтения. Обычно вы также хотите вызвать curl_easy_setopt, передав параметр CURLOPT_READDATA, чтобы установить буфер, который вы будете отправлять. Как только вы это сделаете, cURL вызовет вашу функцию, передав ей адрес, который вы установили с помощью CURLOPT_READDATA.

Кроме того, cURL использует «чтение» и «запись» для обозначения движения данных между вашим кодом и самим cURL. В результате, когда вы отправляете пакеты (о которых большинство людей думают как о записи), он использует функцию чтения, а когда вы получаете пакеты (о которых большинство людей думают как о чтении), он использует функцию записи.

Также обратите внимание, что, поскольку он вызывается cURL, вашей функции обратного вызова обычно необходимо использовать связь "C" и быть свободной функцией или статической функцией-членом.

...