如何修改标题并将其添加到下载Curl c++中
how to modified header and add it to download Curl c++
im尝试更多时间在谷歌中搜索,但没有示例显示如何修改标题数据并使用Curl将其添加到下载中。这是我通过服务器获取标头数据响应的方法
bool getHeader(CURL* url, std::string name, std::string url_down,
std::string savepath) {
bool result = false;
url = curl_easy_init();
FILE* headf;
CURLcode res;
std::string header_path = savepath + "/header.txt";
const char* url_d = url_down.c_str();
const char* save_header_down = header_path.c_str();
if (url) {
headf = fopen(save_header_down, "wb");
if (!headf) {
curl_easy_cleanup(url);
}
curl_easy_setopt(url, CURLOPT_URL, url_d);
curl_easy_setopt(url, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(url, CURLOPT_NOPROGRESS, false);
curl_easy_setopt(url, CURLOPT_NOBODY, true);
curl_easy_setopt(url, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(url, CURLOPT_HEADERDATA, headf);
res = curl_easy_perform(url);
LOGI("SDK: START DOWNLOAD HEADER");
if (res == CURLE_OK) {
LOGI("SDK: HEADER DOWNLOADED!");
char* ct;
char* ar;
double *dTotal;
res = curl_easy_getinfo(url, CURLINFO_CONTENT_TYPE, &ct);
res = curl_easy_getinfo(url, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &dTotal);
res = curl_easy_getinfo(url, CURLINFO_ACCEPT_RANGES, &ar);
if((CURLE_OK == res) && ct){
LOGI("SDK: HEADER CONTENT TYPE: %s", ct);
LOGI("SDK: HEADER Content-Length: %d", dTotal);
LOGI("SDK: HEADER Accept-Ranges: %s", ar);
}
result = true;
}
fclose(headf);
curl_easy_cleanup(url);
}
return result;
}
你可以看到我在curl文档中找不到CURLINFO_ACCEPT_RANGES任何人都可以告诉我如何在curl中获得header的accept范围,修改它并添加到下载中。感谢
我不完全确定您的函数要实现什么,但这里有一个示例,说明如何从HTTP请求中捕获数据和标头。也许它会帮助你实现你想要做的事情:
#include <curl/curl.h>
size_t write_func(void* buf, size_t size, size_t nmemb, void* userp)
{
if(userp)
{
std::string& s = *static_cast<std::string*>(userp);
std::string::size_type len = size * nmemb;
s.append(static_cast<char*>(buf), len);
return nmemb;
}
return 0;
}
int main()
{
CURL* curl = curl_easy_init();
CURLcode code = CURLE_OK;
std::string url = "http://google.com/search?q=wibble";
long timeout = 60; // seconds
std::string data;
std::string headers;
if(CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_func))
|| CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L))
|| CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L))
|| CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data))
|| CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_WRITEHEADER, &headers))
|| CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout))
|| CURLE_OK != (code = curl_easy_setopt(curl, CURLOPT_URL, url.c_str())))
{
std::cerr << curl_easy_strerror(code) << 'n';
return 1;
}
if(CURLE_OK != (code = curl_easy_perform(curl)))
{
std::cerr << curl_easy_strerror(code) << 'n';
return 1;
}
std::cout << "Data:" << 'n';
std::cout << data << 'n';
std::cout << "Headers:" << 'n';
std::cout << headers << 'n';
curl_easy_cleanup(curl);
}
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 如何将用户下载的标头文件添加到系统中默认情况下的标题文件列表
- 如何修改标题并将其添加到下载Curl c++中
- 当您下载其他库并将其功能添加到C ++程序中时,您是否能够在另一台PC上运行您的软件(没有库)?
- 下载什么编译器,如何下载编译器,以及如何将编译器添加到Qt?(ubuntu 12.04)
- 添加下载的c++源代码到我的项目时的良好实践