J'utilise libcurl pour envoyer des requêtes HTTP post et traiter ensuite les réponses. Lorsqu'une réponse est reçue, la bibliothèque rappelle mon programme en utilisant la fonction donnée à l'option CURLOPT_WRITEFUNCTION
propriété via curl_easy_setopt
.
// callback function
std::size_t on_data(const char* buffer, const std::size_t size, const std::size_t nmemb, void* context);
La documentation n'indique pas clairement si vous pouvez laisser les données dans le tampon (en renvoyant 0 à partir du rappel) ou si vous devez copier les données dans un tampon local et continuer à les ajouter à chaque rappel suivant jusqu'à ce que vous ayez reçu le message complet.
Mes questions sont les suivantes :
- Quelle est la meilleure façon d'obtenir la longueur totale du message ?
Content-Length
en-tête viaCURLOPT_WRITEHEADER
? - Existe-t-il un moyen d'éviter de copier des réponses partielles et d'attendre la réception du message final pour le traiter dans son intégralité ?