C语言libcurl库的使用

C语言libcurl库的安装与使用

curl库的作用是访问http和HTTPS网站 HTTPS加密的网站
在linux和树莓派都可以

把curl-7.71.1.tar.bz文件复制到linux的工作目录/home/lth
mkdir http
cd http
在安装curl库之前要安装支持HTTPS的OpenSSL工具
在浏览器搜索wget OpenSSL.tar 获取开源工具方法
wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz安装命令
tar -vxf openssl-1.1.1a.tar.gz
cd openssl-1.1.1a/
./config
make
sudo make install

cp ~/curl-7.71.1.tar.gz . ~ == /home/lth
tar -xvf curl-7.71.1.tar.gz
cd curl-7.71.1
1、vi README 查看库使用说明
cd docs
2、vi INSTALL.md 查看安装库的说明

在调用其他库原理一样
安装
步骤1 有三种选择 ./configure --prefix= P W D / i n s t a l l − − w i t h − s s l . / c o n f i g u r e − − p r e f i x = PWD/_install --with-ssl ./configure --prefix= PWD/installwithssl./configureprefix=PWD/_install --host=arm-linux P W D 当 前 路 径 配 置 指 定 库 安 装 路 径 指 定 编 译 的 工 具 a r m − l i n u x 即 在 指 定 那 个 平 台 下 可 使 用 该 库 . / c o n f i g u r e − − p r e f i x = PWD当前路径 配置 指定库安装路径 指定编译的工具arm-linux 即在指定那个平台下可使用该库 ./configure --prefix= PWDarmlinux使./configureprefix=PWD/_install
配置 指定安装路径 默认指定平台编译的工具gcc
如果在树莓派就是默认arm-linux-gnueabihf

./configure --prefix=$PWD/_install --host=arm-linux-gnueabihf

–with-ssl添加支持HTTPS格式协议,默认为http,翔云为HTTPS的
./configure --prefix=$PWD/_install --with-ssl

./configure 则为安装默认的路径
步骤2
make 编译之后才生成_install文件

步骤3
make install
cd _install
cd bin查看curl的命令
ls
curl 是一个指令
curl --help查看curl的使用说明
cd … 回到_install目录
cd include 查看curl的头文件
cd lib 查看curl的动态库和静态库

步骤4 调库编译
在编译时需要写入共享库路径
在/curl-7.71.1目录下
写入共享库路径命令:export LD_LIBRARY_PATH=./_install/lib/ 设置程序共享库位置
如果是自己制作的库就要export LD_LIBRARY_PATH=./_install/lib/
如果是别人的库./configure不指定安装路径不用export LD_LIBRARY_PATH=./_install/lib/
gcc demo1.c -I ./_install/include/ -L ./_install/lib/ -lcurl
-大写i curl头文件路径 -L 库路径 -lcurl库 包括curl函数的封装

使用curl库的例程1

#include <stdio.h>
#include <curl/curl.h>
#define true 1
#define false 0
typedef unsigned bool;
bool getUrl(char *filename)
{
    CURL *curl;
    CURLcode res;
    FILE *fp;
    if ((fp = fopen(filename, "w")) == NULL)  // 返回结果用文件存储
        return false;
    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, "Accept: Agent-007");
    curl = curl_easy_init();    // 初始化
    if (curl)
    {
        //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");// 代理
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改协议头
        curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //将返回的http头输出到fp指向的文件
        curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); //将返回的html主体数据输出到fp指向的文件
        res = curl_easy_perform(curl);   // 执行
        if (res != 0) {

            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        fclose(fp);
        return true;
    }
}
bool postUrl(char *filename)
{
    CURL *curl;
    CURLcode res;
    FILE *fp;
    if ((fp = fopen(filename, "w")) == NULL)
        return false;
    curl = curl_easy_init();
    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "&logintype=uid&u=xieyan&psw=xxx86");    // 指定post内容
        //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");
        curl_easy_setopt(curl, CURLOPT_URL, " http://mail.sina.com.cn/cgi-bin/login.cgi ");   // 指定url
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }
    fclose(fp);
    return true;
}
int main(void)
{
    getUrl("/tmp/get.html");
    postUrl("/tmp/post.html");
}

例程2

#include <stdio.h>
#include<string.h>
#include <curl/curl.h>
#define true 1  //C语言中没有bool类型,bool类型是C++的,以下三行是C语言定义的bool类型
#define false 0
typedef unsigned bool;

size_t readfunction( void *ptr, size_t size, size_t nmemb, void *stream){//规定的函数原型
	char buf[10240]={'\0'};
	strncpy(buf,ptr,10240);
	printf("===============================getdata===================================\n");
	printf("%s\n",buf);
	
	
}
//GET 请求表单
bool getUrl(char *filename)
{
    CURL *curl;
    CURLcode res;
    FILE *fp;
    if ((fp = fopen(filename, "w")) == NULL)  // 返回结果用文件存储
        return false;
    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, "Accept: Agent-007");//
    //CURLcode curl_global_init(CURL_GLOBAL_ALL);
    curl = curl_easy_init();    // 初始化,相当于套接字
    if (curl)
    {	//curl_easy_setopt它告诉curl库.程序将有如何的行为. 比如要查看一个网页的html代码等.
		//第三个参数 既可以是个函数的指针,也可以是某个对象的指针,也可以是个long型的变量.它用什么这取决于第二个参数的选项宏定义.
        //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");// 代理
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改协议头
        curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");//访问的网址
        //curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //将返回的http头内容输出到fp指向的文件
		// CURLOPT_WRITEFUNCTION选项将http头内容作为参数调用readfunction函数,与CURLOPT_WRITEDATA是文件
        curl_easy_setopt(curl,  CURLOPT_WRITEFUNCTION, readfunction); //是函数
       // curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); //将返回的html主体数据输出到fp指向的文件
        res = curl_easy_perform(curl);   // 执行
        if (res != 0) {

            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        fclose(fp);
        return true;
    }
}
bool postUrl(char *filename)
{
    CURL *curl;
    CURLcode res;
    FILE *fp;
    if ((fp = fopen(filename, "w")) == NULL)
        return false;
	
    curl = curl_easy_init();
    if (curl)
    {
		
        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "&logintype=uid&u=xieyan&psw=xxx86");    // 指定post内容
        //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");
        curl_easy_setopt(curl, CURLOPT_URL, " http://mail.sina.com.cn/cgi-bin/login.cgi ");   // 指定url
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }
    fclose(fp);
    return true;
}
int main(void)
{
    getUrl("/tmp/get.html");
    postUrl("/tmp/post.html");
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
libcurl是一个功能强大的,可用于执行各种网络操作的C语言。它支持多种协议,例如HTTP、FTP、SMTP等,并提供了各种选项和参数,以便您可以自定义网络请求以及如何处理响应。下面是一些使用libcurl的基本步骤: 1. 包含libcurl头文件 在您的C文件中,您需要包含libcurl的头文件: ```c #include <curl/curl.h> ``` 2. 初始化CURL使用libcurl之前,您需要初始化一个CURL句柄,可以使用`curl_easy_init()`函数来实现: ```c CURL *curl; curl = curl_easy_init(); if (!curl) { // 初始化失败 } ``` 3. 设置URL和选项 在CURL句柄上设置选项,以指定要执行哪个URL以及如何处理响应。例如,您可以使用`CURLOPT_URL`选项指定要访问的URL: ```c curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); ``` 还有许多其他选项可以设置,例如`CURLOPT_FOLLOWLOCATION`选项可以让libcurl自动跟踪重定向: ```c curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); ``` 4. 执行HTTP请求 一旦您设置了所有选项,就可以使用`curl_easy_perform()`函数执行HTTP请求: ```c CURLcode res; res = curl_easy_perform(curl); if (res != CURLE_OK) { // 请求失败 } ``` 5. 处理响应 处理HTTP响应的方式取决于您正在执行的操作。例如,如果您正在下载文件,您可以将响应写入本地文件: ```c FILE *fp; fp = fopen("myfile.txt", "wb"); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); res = curl_easy_perform(curl); fclose(fp); ``` 如果您正在执行POST请求,则可以使用`CURLOPT_POSTFIELDS`选项设置请求正文,并使用`CURLOPT_WRITEFUNCTION`选项指定一个回调函数来处理响应: ```c curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "param1=value1&param2=value2"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); ``` 6. 清理 最后,清理CURL句柄并释放所有资源: ```c curl_easy_cleanup(curl); ``` 以上是使用libcurl的基本步骤。根据您的需求,您可以使用更多选项和参数自定义您的网络请求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值