win平台下,采用libcurl库实现http、https的get请求

前提:编译好带openssl库的libcurl库,并链接在项目中,包含必要的头文件和库

http请求:

/**
* @brief 采用libcurl库实现http请求
*
* @param pert
* @param 2023年11月7日22:40:00
*/


//$url = '//www.jb51.net';
//$curl = curl_init();
//curl_setopt($curl, CURLOPT_URL, $url);
//curl_setopt($curl, CURLOPT_HEADER, 1);
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//$data = curl_exec($curl);
//curl_close($curl);
//var_dump($data);

#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

char recv1_buffer[10240] = { 0 };
size_t recv1_buffer_len;
#define MIN(x,y) ((x)<(y)?(x):(y))

static size_t fun_callback(void* buffer, size_t size, size_t block, void* f_user)
{
    unsigned length;
    unsigned int r_left_len = 0;
    unsigned copy_len = 0;

    length = size * block;
    if (length == 0) {
        return 0;
    }

    r_left_len = sizeof(recv1_buffer) - recv1_buffer_len - 1;
    copy_len = MIN(length, r_left_len);
    memcpy(recv1_buffer + recv1_buffer_len, buffer, copy_len);
    recv1_buffer_len += copy_len;
    return length;
}

static size_t get_http_req(void)
{
    CURL* curl = NULL;
    CURLcode res;
    const char* url = "http://httpbin.org/get";

    memset(recv1_buffer, 0, sizeof(recv1_buffer));
    recv1_buffer_len = 0;
    curl = curl_easy_init();
    if (!curl) {
        return 0;
    }

    curl_easy_setopt(curl, CURLOPT_URL, url);  
    // 设置超时时间为 5 秒
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 5L);
    curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &fun_callback);
    res = curl_easy_perform(curl);
    if (res == CURLE_OK) {
        printf("--->%s<---\n", recv1_buffer);
    }
    else {
        printf("error:--->%s<---\n", curl_easy_strerror(res));
    }
    curl_easy_cleanup(curl);
    return 0;
}

int main(void)
{
    get_http_req();
    system("pause");
    return 0;
}

https:

/**
* @brief 采用libcurl库实现https请求
*
* @param pert
* @param 2023年11月7日22:40:00
*/

//$url = 'https://www.jb51.net';
//$curl = curl_init();
//curl_setopt($curl, CURLOPT_URL, $url);
//curl_setopt($curl, CURLOPT_HEADER, 1);
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // https请求 不验证证书和hosts//这个是重点。
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//$data = curl_exec($curl);
//curl_close($curl);
//var_dump($data);

#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

char recv_buffer[10240] = { 0 };
size_t recv_buffer_len;
#define MIN(x,y) ((x)<(y)?(x):(y))

static size_t fun_callback(void* buffer, size_t size, size_t block, void* f_user)
{
    unsigned length;
    unsigned int r_left_len = 0;
    unsigned copy_len = 0;

    length = size * block;
    if (length == 0) {
        return 0;
    }

    r_left_len = sizeof(recv_buffer) - recv_buffer_len - 1;
    copy_len = MIN(length, r_left_len);
    memcpy(recv_buffer + recv_buffer_len, buffer, copy_len);
    recv_buffer_len += copy_len;
    return length;
}

static size_t get_https_req(void)
{
    CURL* curl = NULL;
    CURLcode res;
    const char* url = "https://www.baidu.com/";

    memset(recv_buffer, 0, sizeof(recv_buffer));
    recv_buffer_len = 0;
    curl = curl_easy_init();
    if (!curl) {
        return 0;
    }

    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);
    curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L);
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); // 跳过证书检查  
    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0);  // 不 从证书中检查SSL加密算法是否存在
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &fun_callback);
    res = curl_easy_perform(curl);
    if (res == CURLE_OK) {
        printf("--->%s<---\n", recv_buffer);
    }
    else {
        printf("error:--->%s<---\n", curl_easy_strerror(res));
    }
    curl_easy_cleanup(curl);
    return 0;
}

int main1(void)
{
    get_https_req();
    system("pause");
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值