gpt4 book ai didi

C libcurl 小于预期的响应大小

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

我正在尝试使用 libcurl 下载网页的内容,但是我得到的响应比预期的要小得多 - 文档说最大大小是 16K,但我得到的响应比预期的要小得多那个。

例如,请求 en Wikipedia page "Hello"当页面在 gedit 中为 71915 字节时,返回大小为 1239 字节。请求a page from the haveibeenpwned API返回 554 的大小,而不是 19942 字节的实际大小。

int callback(char* resultPtr, size_t ignore, size_t resultSize) { // resultPtr points to the start of the response, ignore is always 1, resultSize varies
printf("Response size is %i", resultSize);
for(int i = 0; i < resultSize; i++) { printf("%c", *(resultPtr+i));} // credit @BartFriederichs
return 0;
}

int doCurl(char* paramsPtr) {
char url[43]; // Add space for /0
CURL *curl = curl_easy_init(); // Initialise cURL
strcpy(url, "https://api.pwnedpasswords.com/range/"); // Testing URL
strcat(url, &*paramsPtr); // Always 5 characters
curl_easy_setopt(curl, CURLOPT_URL, url); // cURL URL set to URL specified above
curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, 120000L); // Tried to set this to make the output longer
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
curl_easy_perform(curl);
return 0;
}

这段代码的目的是从 HIBP 的 Pwned Passwords API 获取响应,并将用户给出的字符串与网页的结果进行比较。搜索前 554 个字节(cURL 输出的第一个数据 block )内的任何字符串都成功,但之后失败。

最佳答案

查看 documentation .它说:

The callback function will be passed as much data as possible in all invokes, but you must not make any assumptions. It may be one byte, it may be thousands.

虽然没有明确说明,但这个函数可能会被多次调用。您可以使用 userdata 指针(您还没有使用过)来跟踪您以前的数据。我建议你也看看 example code :

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;

char *ptr = realloc(mem->memory, mem->size + realsize + 1);
if(ptr == NULL) {
/* out of memory! */
printf("not enough memory (realloc returned NULL)\n");
return 0;
}

mem->memory = ptr;
memcpy(&(mem->memory[mem->size]), contents, realsize);
mem->size += realsize;
mem->memory[mem->size] = 0;

return realsize;
}

关于C libcurl 小于预期的响应大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53448685/

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