前提:编译好带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;
}