Curlpp を使用して、さまざまな Web サービスにリクエストを送信し、データを送受信しています。JSONデータの送受信にしか使用していないため、これまでのところうまくいきました。
現在、Web サービスが zip ファイルをバイナリ形式で返す状況があります。これは、受信したデータが完全ではないという問題に遭遇した場所です。
最初に、オプション WriteStream を使用して ostringstream にデータを書き込むように Curl を設定しましたが、データに null 文字が含まれていたため、データが最初の null 文字で停止したため、これは正しいアプローチではないことがわかりました。
その後、WriteStream を使用する代わりに、コールバック関数で WriteFunction を使用しました。この場合の問題は、データの量に関係なく、この関数が常に 2 回または 3 回呼び出されることです。これにより、ファイルの最初の部分とは思えないデータのチャンクが常にいくつか存在することになりますが、データには常に最初の 2 文字として PK が含まれており、zip ファイルであることを示しています。
いくつかのツールを使用して、データが完全にアプリケーションに送信されていることを確認したので、これは Web サービスの問題ではありません。
ここにコード。ホスト名、ポート、ヘッダー、ポストフィールドなどのオプションが別の場所に設定されていることに注意してください。
string requestData;
size_t WriteStringCallback(char* ptr, size_t size, size_t nmemb)
{
requestData += ptr;
int totalSize= size*nmemb;
return totalSize;
}
const string CurlRequest::Perform()
{
curlpp::options::WriteFunction wf(WriteStringCallback);
this->request.setOpt( wf );
this->request.perform();
return requestData;
}
これを修正する方法についての手がかりが枯渇したため、またcurlppの文書化が不十分であるため(さらにcurlppのWebサイトが消えてからさらに悪いことに)、誰かがこの問題について私を助けてくれることを願っています.