Добавьте запрос URI в команду LibCurl PostC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Добавьте запрос URI в команду LibCurl Post

Сообщение Anonymous »

Я использую Ubuntu 22.04 и libcurl 7.81.0 для создания и отправки команды onvif post. Изначально у меня все работало на Python, но я не могу использовать Python в окончательном проекте. Поэтому я хотел бы воспроизвести команду в libcurl. Моя проблема не в отправке команд и получении ответов.
Мне нужно больше ясности относительно того, как установить URI запроса в заголовке. Когда я отправляю команду публикации через Python с помощью Zeep, заголовок сообщения на изображении из Wireshark выглядит следующим образом:
[img]https://i.stack.imgur.com /4ADDl.png[/img]

Однако, когда я пытаюсь отправить сообщение внутри libcurl, я получаю следующее:

Есть ли опция Curlopt, которую мне не хватает, чтобы установить это поле URI? Мне действительно нужен Curl, чтобы точно воспроизвести то, что было отправлено в Python.
Мои параметры Curl установлены с помощью:

Код: Выделить всё

curl = curl_easy_init();
std::string url = serverIP + ":" + std::to_string(serverPort);
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, settings.responseTimeout_ms);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &cameraResponse);
Мой обратный вызов:

Код: Выделить всё

size_t writeCallback(char* contents, size_t size, size_t nmemb, std::string* userp)
{
userp->append(contents, size * nmemb);
return size * nmemb;
}
Затем я создаю и устанавливаю поле заголовка (опуская фактическое содержимое строки из этого сообщения)

Код: Выделить всё

struct curl_slist* header = nullptr;
header = curl_slist_append(header, host.c_str());
header = curl_slist_append(header, agent.c_str());
header = curl_slist_append(header, acceptEncoding.c_str());
header = curl_slist_append(header, accept.c_str());
header = curl_slist_append(header, connection.c_str());
header = curl_slist_append(header, soapAction.c_str());
header = curl_slist_append(header, contentType.c_str());
header = curl_slist_append(header, contentLength.c_str());
содержание представляет собой просто закодированные данные в формате мыла, которые я хочу отправить. Насколько мне известно, здесь тоже нет проблем.
Затем я устанавливаю последние параметры завивки и вызываю easy Perform

Код: Выделить всё

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, content.c_str());
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header);
CURLcode curlResult = curl_easy_perform(curl);
Я обнаружил, что ответы с моей камеры при использовании libcurl примерно в 2 раза медленнее, чем при использовании Python. Я предполагаю, что это связано с различиями в формате сообщения. Я хотел бы начать с исправления запроса URI, как упоминалось выше. Буду признателен за отзывы по этой теме.
Кроме того, я вижу, что параметр загиба для моего контента — «URLOPT_POSTFIELDS» во множественном числе. Я предполагаю, что это просто означает то, что я втиснул в содержимое в моем случае (а не фактические дополнительные входные данные для этой опции завитка).

Подробнее здесь: https://stackoverflow.com/questions/783 ... st-command
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»