Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;卷曲-如何保存一个完整的网页到一个文件? 我试图用C++(VisualStudio 2013)将一个完整的网页保存到.txt文件。我用的是卷发。 一切正常,但我正在试图保存的网站使用了大量javascript生成页面。因此,当我用cURL保存网页时,.txt文件只有约170行。 当我用Google Chrome(ctrl+s)将网页保存到.htm文件时,.htm文件有2000多行。有没有办法将一个完全加载的网页保存到一个文件中? 这是我正在使用的代码: struct MemoryStruct { char *memory; size_t size; }; static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size * nmemb; struct MemoryStruct *mem = (struct MemoryStruct *)userp; mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1); if (mem->memory == NULL) { /* out of memory! */ printf("not enough memory (realloc returned NULL)\n"); return 0; } memcpy(&(mem->memory[mem->size]), contents, realsize); mem->size += realsize; mem->memory[mem->size] = 0; return realsize; } int main(void) { CURL *curl_handle; CURLcode res; struct MemoryStruct chunk; chunk.memory = (char*)malloc(1); /* will be grown as needed by the realloc above */ chunk.size = 0; /* no data at this point */ curl_global_init(CURL_GLOBAL_ALL); /* init the curl session */ curl_handle = curl_easy_init(); /* specify URL to get */ curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.example.com/"); /* send all data to this function */ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); /* we pass our 'chunk' struct to the callback function */ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); /* some servers don't like requests that are made without a user-agent field, so we provide one */ curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0"); /* get it! */ res = curl_easy_perform(curl_handle); /* check for errors */ if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { /* * Now, our chunk.memory points to a memory block that is chunk.size * bytes big and contains the remote file. * * Do something nice with it! */ printf("%lu bytes retrieved\n", (long)chunk.size); } std::ofstream oplik; oplik.open("test.txt"); oplik << chunk.memory; oplik.close(); /* cleanup curl stuff */ curl_easy_cleanup(curl_handle); if (chunk.memory) free(chunk.memory); /* we're done with libcurl, so clean it up */ curl_global_cleanup(); return 0; } struct MemoryStruct{ 字符*内存; 大小; }; 静态尺寸 WriteMemoryCallback(void*contents、size\u t size、size\u t nmemb、void*userp) { 大小\u t realsize=大小*nmemb; struct MemoryStruct*mem=(struct MemoryStruct*)userp; mem->memory=(char*)realloc(mem->memory,mem->size+realsize+1); if(mem->memory==NULL){ /*内存不足*/ printf(“内存不足(realloc返回NULL)\n”); 返回0; } memcpy(&(mem->memory[mem->size]),contents,realsize; mem->size+=realsize; mem->memory[mem->size]=0; 返回realsize; } 内部主(空) { 卷曲*卷曲柄; 卷曲编码; 结构记忆结构块; chunk.memory=(char*)malloc(1);/*将根据上述realloc的需要进行增长*/ chunk.size=0;/*此时没有数据*/ curl\u global\u init(curl\u global\u ALL); /*初始化curl会话*/ curl_handle=curl_easy_init(); /*指定要获取的URL*/ curl\u easy\u setopt(curl\u句柄,CURLOPT\u URL,“http://www.example.com/"); /*将所有数据发送到此函数*/ curl\u easy\u setopt(curl\u句柄、CURLOPT\u WRITEFUNCTION、WriteMemoryCallback); /*我们将“chunk”结构传递给回调函数*/ curl_easy_setopt(curl_句柄、CURLOPT_WRITEDATA、(void*)和chunk); /*有些服务器不喜欢没有用户代理的请求 字段,所以我们提供一个*/ curl_easy_setopt(curl_句柄,CURLOPT_用户代理,“libcurl代理/1.0”); /*明白了*/ res=卷曲轻松执行(卷曲手柄); /*检查错误*/ 如果(res!=卷曲(OK){ fprintf(stderr,“curl\u easy\u perform()失败:%s\n”, 卷曲(容易的); } 否则{ /* *现在,我们的chunk.memory指向一个名为chunk.size的内存块 *字节大,包含远程文件。 * *用它做点好事吧! */ printf(“%lu字节检索\n”,(长)chunk.size); } std::流oplik; oplik.open(“test.txt”); oplik_C++_Curl_Save_Webpage - Fatal编程技术网 memory=(char*)realloc(mem->memory,mem->size+realsize+1); if(mem->memory==NULL){ /*内存不足*/ printf(“内存不足(realloc返回NULL)\n”); 返回0; } memcpy(&(mem->memory[mem->size]),contents,realsize; mem->size+=realsize; mem->memory[mem->size]=0; 返回realsize; } 内部主(空) { 卷曲*卷曲柄; 卷曲编码; 结构记忆结构块; chunk.memory=(char*)malloc(1);/*将根据上述realloc的需要进行增长*/ chunk.size=0;/*此时没有数据*/ curl\u global\u init(curl\u global\u ALL); /*初始化curl会话*/ curl_handle=curl_easy_init(); /*指定要获取的URL*/ curl\u easy\u setopt(curl\u句柄,CURLOPT\u URL,“http://www.example.com/"); /*将所有数据发送到此函数*/ curl\u easy\u setopt(curl\u句柄、CURLOPT\u WRITEFUNCTION、WriteMemoryCallback); /*我们将“chunk”结构传递给回调函数*/ curl_easy_setopt(curl_句柄、CURLOPT_WRITEDATA、(void*)和chunk); /*有些服务器不喜欢没有用户代理的请求 字段,所以我们提供一个*/ curl_easy_setopt(curl_句柄,CURLOPT_用户代理,“libcurl代理/1.0”); /*明白了*/ res=卷曲轻松执行(卷曲手柄); /*检查错误*/ 如果(res!=卷曲(OK){ fprintf(stderr,“curl\u easy\u perform()失败:%s\n”, 卷曲(容易的); } 否则{ /* *现在,我们的chunk.memory指向一个名为chunk.size的内存块 *字节大,包含远程文件。 * *用它做点好事吧! */ printf(“%lu字节检索\n”,(长)chunk.size); } std::流oplik; oplik.open(“test.txt”); oplik,c++,curl,save,webpage,C++,Curl,Save,Webpage" /> memory=(char*)realloc(mem->memory,mem->size+realsize+1); if(mem->memory==NULL){ /*内存不足*/ printf(“内存不足(realloc返回NULL)\n”); 返回0; } memcpy(&(mem->memory[mem->size]),contents,realsize; mem->size+=realsize; mem->memory[mem->size]=0; 返回realsize; } 内部主(空) { 卷曲*卷曲柄; 卷曲编码; 结构记忆结构块; chunk.memory=(char*)malloc(1);/*将根据上述realloc的需要进行增长*/ chunk.size=0;/*此时没有数据*/ curl\u global\u init(curl\u global\u ALL); /*初始化curl会话*/ curl_handle=curl_easy_init(); /*指定要获取的URL*/ curl\u easy\u setopt(curl\u句柄,CURLOPT\u URL,“http://www.example.com/"); /*将所有数据发送到此函数*/ curl\u easy\u setopt(curl\u句柄、CURLOPT\u WRITEFUNCTION、WriteMemoryCallback); /*我们将“chunk”结构传递给回调函数*/ curl_easy_setopt(curl_句柄、CURLOPT_WRITEDATA、(void*)和chunk); /*有些服务器不喜欢没有用户代理的请求 字段,所以我们提供一个*/ curl_easy_setopt(curl_句柄,CURLOPT_用户代理,“libcurl代理/1.0”); /*明白了*/ res=卷曲轻松执行(卷曲手柄); /*检查错误*/ 如果(res!=卷曲(OK){ fprintf(stderr,“curl\u easy\u perform()失败:%s\n”, 卷曲(容易的); } 否则{ /* *现在,我们的chunk.memory指向一个名为chunk.size的内存块 *字节大,包含远程文件。 * *用它做点好事吧! */ printf(“%lu字节检索\n”,(长)chunk.size); } std::流oplik; oplik.open(“test.txt”); oplik,c++,curl,save,webpage,C++,Curl,Save,Webpage" />

C++;卷曲-如何保存一个完整的网页到一个文件? 我试图用C++(VisualStudio 2013)将一个完整的网页保存到.txt文件。我用的是卷发。 一切正常,但我正在试图保存的网站使用了大量javascript生成页面。因此,当我用cURL保存网页时,.txt文件只有约170行。 当我用Google Chrome(ctrl+s)将网页保存到.htm文件时,.htm文件有2000多行。有没有办法将一个完全加载的网页保存到一个文件中? 这是我正在使用的代码: struct MemoryStruct { char *memory; size_t size; }; static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size * nmemb; struct MemoryStruct *mem = (struct MemoryStruct *)userp; mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1); if (mem->memory == NULL) { /* out of memory! */ printf("not enough memory (realloc returned NULL)\n"); return 0; } memcpy(&(mem->memory[mem->size]), contents, realsize); mem->size += realsize; mem->memory[mem->size] = 0; return realsize; } int main(void) { CURL *curl_handle; CURLcode res; struct MemoryStruct chunk; chunk.memory = (char*)malloc(1); /* will be grown as needed by the realloc above */ chunk.size = 0; /* no data at this point */ curl_global_init(CURL_GLOBAL_ALL); /* init the curl session */ curl_handle = curl_easy_init(); /* specify URL to get */ curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.example.com/"); /* send all data to this function */ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); /* we pass our 'chunk' struct to the callback function */ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); /* some servers don't like requests that are made without a user-agent field, so we provide one */ curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0"); /* get it! */ res = curl_easy_perform(curl_handle); /* check for errors */ if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { /* * Now, our chunk.memory points to a memory block that is chunk.size * bytes big and contains the remote file. * * Do something nice with it! */ printf("%lu bytes retrieved\n", (long)chunk.size); } std::ofstream oplik; oplik.open("test.txt"); oplik << chunk.memory; oplik.close(); /* cleanup curl stuff */ curl_easy_cleanup(curl_handle); if (chunk.memory) free(chunk.memory); /* we're done with libcurl, so clean it up */ curl_global_cleanup(); return 0; } struct MemoryStruct{ 字符*内存; 大小; }; 静态尺寸 WriteMemoryCallback(void*contents、size\u t size、size\u t nmemb、void*userp) { 大小\u t realsize=大小*nmemb; struct MemoryStruct*mem=(struct MemoryStruct*)userp; mem->memory=(char*)realloc(mem->memory,mem->size+realsize+1); if(mem->memory==NULL){ /*内存不足*/ printf(“内存不足(realloc返回NULL)\n”); 返回0; } memcpy(&(mem->memory[mem->size]),contents,realsize; mem->size+=realsize; mem->memory[mem->size]=0; 返回realsize; } 内部主(空) { 卷曲*卷曲柄; 卷曲编码; 结构记忆结构块; chunk.memory=(char*)malloc(1);/*将根据上述realloc的需要进行增长*/ chunk.size=0;/*此时没有数据*/ curl\u global\u init(curl\u global\u ALL); /*初始化curl会话*/ curl_handle=curl_easy_init(); /*指定要获取的URL*/ curl\u easy\u setopt(curl\u句柄,CURLOPT\u URL,“http://www.example.com/"); /*将所有数据发送到此函数*/ curl\u easy\u setopt(curl\u句柄、CURLOPT\u WRITEFUNCTION、WriteMemoryCallback); /*我们将“chunk”结构传递给回调函数*/ curl_easy_setopt(curl_句柄、CURLOPT_WRITEDATA、(void*)和chunk); /*有些服务器不喜欢没有用户代理的请求 字段,所以我们提供一个*/ curl_easy_setopt(curl_句柄,CURLOPT_用户代理,“libcurl代理/1.0”); /*明白了*/ res=卷曲轻松执行(卷曲手柄); /*检查错误*/ 如果(res!=卷曲(OK){ fprintf(stderr,“curl\u easy\u perform()失败:%s\n”, 卷曲(容易的); } 否则{ /* *现在,我们的chunk.memory指向一个名为chunk.size的内存块 *字节大,包含远程文件。 * *用它做点好事吧! */ printf(“%lu字节检索\n”,(长)chunk.size); } std::流oplik; oplik.open(“test.txt”); oplik

C++;卷曲-如何保存一个完整的网页到一个文件? 我试图用C++(VisualStudio 2013)将一个完整的网页保存到.txt文件。我用的是卷发。 一切正常,但我正在试图保存的网站使用了大量javascript生成页面。因此,当我用cURL保存网页时,.txt文件只有约170行。 当我用Google Chrome(ctrl+s)将网页保存到.htm文件时,.htm文件有2000多行。有没有办法将一个完全加载的网页保存到一个文件中? 这是我正在使用的代码: struct MemoryStruct { char *memory; size_t size; }; static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size * nmemb; struct MemoryStruct *mem = (struct MemoryStruct *)userp; mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1); if (mem->memory == NULL) { /* out of memory! */ printf("not enough memory (realloc returned NULL)\n"); return 0; } memcpy(&(mem->memory[mem->size]), contents, realsize); mem->size += realsize; mem->memory[mem->size] = 0; return realsize; } int main(void) { CURL *curl_handle; CURLcode res; struct MemoryStruct chunk; chunk.memory = (char*)malloc(1); /* will be grown as needed by the realloc above */ chunk.size = 0; /* no data at this point */ curl_global_init(CURL_GLOBAL_ALL); /* init the curl session */ curl_handle = curl_easy_init(); /* specify URL to get */ curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.example.com/"); /* send all data to this function */ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); /* we pass our 'chunk' struct to the callback function */ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk); /* some servers don't like requests that are made without a user-agent field, so we provide one */ curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0"); /* get it! */ res = curl_easy_perform(curl_handle); /* check for errors */ if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } else { /* * Now, our chunk.memory points to a memory block that is chunk.size * bytes big and contains the remote file. * * Do something nice with it! */ printf("%lu bytes retrieved\n", (long)chunk.size); } std::ofstream oplik; oplik.open("test.txt"); oplik << chunk.memory; oplik.close(); /* cleanup curl stuff */ curl_easy_cleanup(curl_handle); if (chunk.memory) free(chunk.memory); /* we're done with libcurl, so clean it up */ curl_global_cleanup(); return 0; } struct MemoryStruct{ 字符*内存; 大小; }; 静态尺寸 WriteMemoryCallback(void*contents、size\u t size、size\u t nmemb、void*userp) { 大小\u t realsize=大小*nmemb; struct MemoryStruct*mem=(struct MemoryStruct*)userp; mem->memory=(char*)realloc(mem->memory,mem->size+realsize+1); if(mem->memory==NULL){ /*内存不足*/ printf(“内存不足(realloc返回NULL)\n”); 返回0; } memcpy(&(mem->memory[mem->size]),contents,realsize; mem->size+=realsize; mem->memory[mem->size]=0; 返回realsize; } 内部主(空) { 卷曲*卷曲柄; 卷曲编码; 结构记忆结构块; chunk.memory=(char*)malloc(1);/*将根据上述realloc的需要进行增长*/ chunk.size=0;/*此时没有数据*/ curl\u global\u init(curl\u global\u ALL); /*初始化curl会话*/ curl_handle=curl_easy_init(); /*指定要获取的URL*/ curl\u easy\u setopt(curl\u句柄,CURLOPT\u URL,“http://www.example.com/"); /*将所有数据发送到此函数*/ curl\u easy\u setopt(curl\u句柄、CURLOPT\u WRITEFUNCTION、WriteMemoryCallback); /*我们将“chunk”结构传递给回调函数*/ curl_easy_setopt(curl_句柄、CURLOPT_WRITEDATA、(void*)和chunk); /*有些服务器不喜欢没有用户代理的请求 字段,所以我们提供一个*/ curl_easy_setopt(curl_句柄,CURLOPT_用户代理,“libcurl代理/1.0”); /*明白了*/ res=卷曲轻松执行(卷曲手柄); /*检查错误*/ 如果(res!=卷曲(OK){ fprintf(stderr,“curl\u easy\u perform()失败:%s\n”, 卷曲(容易的); } 否则{ /* *现在,我们的chunk.memory指向一个名为chunk.size的内存块 *字节大,包含远程文件。 * *用它做点好事吧! */ printf(“%lu字节检索\n”,(长)chunk.size); } std::流oplik; oplik.open(“test.txt”); oplik,c++,curl,save,webpage,C++,Curl,Save,Webpage,cURL只能保存web服务器交付的内容 如果您想保存除此之外的任何内容,必须像任何web浏览器一样包含javascript解释器来构建网页。我不知道如何做到这一点。难道没有更简单的方法可以用Internet Explorer打开网页,然后获取生成的数据吗?我也不知道,因为我不熟悉Windows或IE。但我可以即时通讯agine,有一些组件允许这样做。否则,您可以查看或

cURL只能保存web服务器交付的内容


如果您想保存除此之外的任何内容,必须像任何web浏览器一样包含javascript解释器来构建网页。

我不知道如何做到这一点。难道没有更简单的方法可以用Internet Explorer打开网页,然后获取生成的数据吗?我也不知道,因为我不熟悉Windows或IE。但我可以即时通讯agine,有一些组件允许这样做。否则,您可以查看或