gpt4 book ai didi

c++ - 知道 libcurl 是否完成文件下载的可靠方法是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 00:36:47 27 4
gpt4 key购买 nike

我写了这个基础类:

class SteamHTTP
{
public:
SteamHTTP();
virtual ~SteamHTTP();

void DownloadAllGames(const wxString& username, wxGauge* progress);

private:
CURL* m_curl;
std::stringstream m_currentRequestString;

private:
static size_t write_func(char *ptr, size_t size, size_t nmemb, void *userdata);
static int progress_func(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow);
};


SteamHTTP::SteamHTTP()
{
m_curl = curl_easy_init();
}

SteamHTTP::~SteamHTTP()
{
curl_easy_cleanup(m_curl);
}

size_t SteamHTTP::write_func(char *data, size_t size, size_t nmemb, void *userdata)
{
SteamHTTP* ptr = reinterpret_cast<SteamHTTP*>(userdata);
ptr->m_currentRequestString << data;
return size*nmemb;
}

int SteamHTTP::progress_func(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
wxGauge* ptr = reinterpret_cast<wxGauge*>(clientp);
ptr->SetValue(dlnow * 100.0f / dlnow );
return 0;
}

void SteamHTTP::DownloadAllGames(const wxString& username, wxGauge* gauge)
{
std::string url;
CURLcode result;

// Build URL
url = std::string("http://steamcommunity.com/id/") + username.mbc_str() + std::string("/games?tab=all&xml=1");

// Set URL
curl_easy_setopt(m_curl, CURLOPT_URL, url.c_str());

// Follow redirection
curl_easy_setopt(m_curl, CURLOPT_FOLLOWLOCATION, 1);

// Data Callback
curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, SteamHTTP::write_func);
curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, this);

// Progress Callback
curl_easy_setopt(m_curl, CURLOPT_PROGRESSFUNCTION, SteamHTTP::progress_func);
curl_easy_setopt(m_curl, CURLOPT_PROGRESSDATA, gauge);
curl_easy_setopt(m_curl, CURLOPT_NOPROGRESS, FALSE);

// Perform
result = curl_easy_perform(m_curl);
if (result != 0){
wxMessageBox(curl_easy_strerror(result), wxMessageBoxCaptionStr, wxICON_ERROR|wxOK);
}
}

我遇到的困难是可靠地告诉 libcurl 何时实际完成。有回调吗?我需要它来解析下载的数据。

判断 libcurl 是否已完成以及我是否可以处理数据的最佳方法是什么?

p.s.:此代码正在进行中,还需要编写检查等。

最佳答案

当 curl_easy_perform() 返回时,它就完成了。它是如此简单。检查返回码以确定是否成功。

关于c++ - 知道 libcurl 是否完成文件下载的可靠方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20923417/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com