gpt4 book ai didi

c - 如何使用 libcurl 通过 https 下载文件 - linux,C?

转载 作者:行者123 更新时间:2023-11-30 20:31:59 26 4
gpt4 key购买 nike

我正在尝试使用 libcurl 从本地 https 服务器下载文件。但是,它没有这样做,我不知道如何调试这个?perror 没有设置任何内容。另外,我正在使用的本地 https 服务器正在使用 - openssl - 2048 位。这是使用以下命令生成的。

openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 365

这是我的 C 代码。我在 linux 上运行这个 - C

    #include <openssl/err.h>
#include <openssl/ssl.h>
#include <curl/curl.h>
#include <stdio.h>

size_t writefunction(void *ptr, size_t size, size_t nmemb, void *stream)
{
printf("called.. writeFunction\r\n");
fwrite(ptr, size, nmemb, (FILE *)stream);
return (nmemb*size);
}

int main(void)
{
CURL *ch;
CURLcode rv;
char caPath[128];
char errbuf[CURL_ERROR_SIZE];

rv = curl_global_init(CURL_GLOBAL_ALL);
ch = curl_easy_init();


rv = curl_easy_setopt(ch, CURLOPT_URL, "https://110.166.10.296:9000/test.conf");

/* provide a buffer to store errors in */
curl_easy_setopt(ch, CURLOPT_ERRORBUFFER, errbuf);
/* provide a buffer to store errors in */
curl_easy_setopt(ch, CURLOPT_ERRORBUFFER, errbuf);

rv = curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, *writefunction);
rv = curl_easy_setopt(ch, CURLOPT_WRITEDATA, stdout);
rv = curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 1L);

printf("set Up CA Path..\r\n");
memset(caPath,'0',sizeof(caPath));
strcpy(caPath,"/home/test/SSL_Server");
rv = curl_easy_setopt(ch, CURLOPT_CAPATH,caPath);

rv = curl_easy_perform(ch);
printf("curl easy perform done..\r\n");

if(rv == CURLE_OK)
printf("*** transfer succeeded ***\n");
else
{
printf("*** transfer failed..****\n");
perror("failed:");

/* if the request did not complete correctly, show the error
information. if no detailed error information was written to errbuf
show the more generic information from curl_easy_strerror instead.
*/
size_t len = strlen(errbuf);
fprintf(stderr, "\nlibcurl: (%d) ", rv);
if(len)
fprintf(stderr, "%s%s", errbuf,
((errbuf[len - 1] != '\n') ? "\n" : ""));
else
fprintf(stderr, "%s\n", curl_easy_strerror(rv));
}


return 0;
}

编译 -

gcccurl.c -ocurl.out-lcurl

O/p -

   ./curl.out 
set Up CA Path..
curl easy perform done..
*** transfer failed..****

libcurl: (60) SSL certificate problem: self signed certificate

最佳答案

rv = curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 1L);

此代码正在启用​​ SSL 证书验证,但由于您使用的是自签名证书而失败。将此选项设置为 0 以禁用验证。

关于c - 如何使用 libcurl 通过 https 下载文件 - linux,C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49120878/

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