gpt4 book ai didi

c - 如何用C下载网页

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:38 25 4
gpt4 key购买 nike

我对 C 和 XML 有点问题。基本上,我使用的代码是:

#include <stdio.h>
#include <curl/curl.h>
#include <libxml/tree.h>
#include <string.h>
#include <stdlib.h>

#define WEBPAGE_URL "http://gdata.youtube.com/feeds/api/videos/mKxLmdBzS10"

typedef struct {
char *contents;
int size;
} data;

/*Curl uses this function to write the contents of a webpage to a file/stdout*/
size_t write_data( void *ptr, size_t size, size_t nmeb, void *stream)
{
data *curl_output = (data *)stream;
int curl_output_size = size * nmeb;

curl_output->contents = (char *) realloc(curl_output->contents, curl_output->size + curl_output_size + 1);
if (curl_output->contents) {
memcpy(curl_output->contents, ptr, curl_output_size); /*Copying the contents*/
curl_output->size += curl_output_size;
curl_output->contents[curl_output->size] = 0;

return curl_output->size;
}
}

int main()
{

data webpage;
webpage.contents = malloc(1);
webpage.size = 1;

CURL *handle = curl_easy_init();
curl_easy_setopt(handle,CURLOPT_URL,WEBPAGE_URL); /*Using the http protocol*/

curl_easy_setopt(handle,CURLOPT_WRITEFUNCTION, write_data); /*Setting up the function meant to copy data*/
curl_easy_setopt(handle,CURLOPT_WRITEDATA, &webpage); /*The data pointer to copy the data*/
curl_easy_perform(handle);
curl_easy_cleanup(handle);
printf("Contents: %s",webpage.contents);
int i;
}

我不是要取回这个 XML:http://gdata.youtube.com/feeds/api/videos/mKxLmdBzS10 .

但目前,我只能得到任意数额的退款,有时是三分之一,有时是一半,有时只是四分之一。

有人知道我做错了什么吗?

最佳答案

问题出在您的 write_data 函数中。

此行将新数据复制到数组的开头,而不是当前结尾。

memcpy(curl_output->contents, ptr, curl_output_size); /*Copying the contents*/

你需要偏移你的指针:

memcpy(curl_output->contents + curl_output->size, ptr, curl_output_size); /* Copying the contents */

此外,您的返回值不正确——它应该是 return(curl_output_size); 来表示成功,通过调用时实际处理的字节数——在括号下面,return(0); 显示错误。

您可能还会发现,如果您选择更多不同的名称而不是 curl_output->sizecurl_output_size,它会澄清事情...也许 curl_output->len ?

关于c - 如何用C下载网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6371922/

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