文章目录

  • 一、libcurl等第三方库的通用编译方法
    • 1、库下载
    • 2、开始安装库
  • 二、调用libcurl编程访问百度主页
    • 1.代码
    • 2、编译注意(编译时链接库、头文件路径,运行需添加动态库为环境变量)

以下部分内容参考博文
https://www.cnblogs.com/xietianjiao/p/13260021.html
https://blog.csdn.net/zhuguanlin121/article/details/116935439

一、libcurl等第三方库的通用编译方法

libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。

1、库下载

libcurl的官网 http://curl.haxx.se/
库下载https://github.com/curl/curl/releases/tag/curl-7_71_1

直接拖拽到Linux中,然后移动到/home下

把curl库复制到新文件夹

解压curl


进入解压后的curl

查看README


进入docs,重点看README文件,怎么安装库

查看INSTALL


查看INSTALL.md


Unix环境下的安装步骤

2、开始安装库

  1. ./configure
  2. make
  3. make install
  4. 安装成功

    需要的一些库

二、调用libcurl编程访问百度主页

1.代码

#include <stdio.h>
#include <curl/curl.h>typedef unsigned int bool;//数据类型别名用typedef  有分号
#define true 1            //宏定义(替换)用define         无冒号
#define false 0bool getUrl(char *filename)//GET请求
{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>指向的文件,//即为filename文件,而主函数传入的参数是 /tmp/get.html,即为真正保存在get.html文件中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)//POST请求
{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 ");   // 指定urlcurl_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");
}

为什么要有下面的那三句代码呢?
类似于bool,true,faluse,这是C99标准才会支持,C++里有专门的bool类型,用来表示真或假。但是在C语言里没有这样的类型,为了修改方便直接这样替换。

2、编译注意(编译时链接库、头文件路径,运行需添加动态库为环境变量)

链接库和头文件再编译,同时注意指明他们的路径

 gcc Test1.c -I ./curl-7.71.1/_install/include/ -L ./curl-7.71.1/_install/lib/ -lcurl
  • Test1.c 文件名
  • ./curl-7.71.1/_install/include/ 头文件的路径
    -./curl-7.71.1/_install/lib/ 库的路径

注意:动态库静态库的链接用-L,而头文件用-I

错误排查:

  • (1)提示找不到头文件#include <curl/curl.h>,说明没有指明头文件的路径

  • (2)如果只是使用-L是默认去usr/lib下去找的,会提示找不到库文件的路径cannot find -lcurl

  • (3)如果编译报错一堆函数不认识,函数是存在库里面的,说明没有链接库

    链接动态库:

    export LD_LIBRARY_PATH=库的路径

成功运行后,可以看到vi /tmp/get.html中已经有了百度官网的代码。

libcurl库简介相关推荐

  1. 网络编程知识预备(5) ——libcurl库简介及其编程访问百度首页

    本文为学习笔记,整合课程内容以及下列文章: 其中,libcurl函数库常用字段解读部分: 参考博文:原文地址 作者:冬冬他哥哥 目录 Libcurl库简介 Libcurl等三方库的通用编译方法 三方库 ...

  2. linux libcurl 库使用方法

    一.ibcurl简介 作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, I ...

  3. libcurl库的安装和使用

    libcurl简介: libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcurl同样支持H ...

  4. Http之libcurl库实现

    原文转载:冬冬他哥哥 仅做笔记参考,代码看不清的请直接跳原文 http协议之详解(点) http协议之https(点) http协议之libcurl(点) 一.libcurl简介 libcurl是一个 ...

  5. libcurl库使用详情、libcurl库的制作

    文章目录 libcurl库的制作 1.libcurl简介: 2.下载libcurl库并制作自己的curl库 3.API说明 相关例子见官网:[example.html](https://curl.se ...

  6. Libcurl库详解

    一.libcurl简介 libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcurl同样支持 ...

  7. libcurl库介绍

    一.libcurl简介 libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcurl同样支持 ...

  8. linux openssl libcurl库 交叉编译

    目录 一.编译前环境准备 二.编译openssl 三.编译curl 一.编译前环境准备 使用的内核:4.15.0-118-generic(命令:uname -r可以查看) 交叉编译器:aarch64- ...

  9. 使用libcurl库编写HTTP客户端(包括GET/POST/HTTPS)

    最近在写一个应用程序, 需要与HTTP服务器进行数据交互, 于是乎自己写了一个类似wget的功能的客户端, 实现很简单, 但是功能不给力, 只可基本功能. 于是又在网上找了找, 发现使用libcurl ...

最新文章

  1. php获取等于符号后面的参数,php获取URL中带#号等特殊符号参数的解决方法
  2. Arch Linux PDF格式文件无法显示中文
  3. 分析Windows和Linux动态库
  4. 网络编程学习笔记(recvfrom很奇怪的一个地方)
  5. redis--Sentinel
  6. 手里的基金在震荡?数据解读2021“开门红”如何控制仓位
  7. mysql常用备份指令
  8. oracle数据库行争用,Oracle技术之数据库高回滚争用的问题
  9. Win-Get——Windows下的自由软件自动安装程序
  10. 前端页面-不可编辑控制
  11. pdo一次插入多条数据的2种实现方式
  12. npm i和npm install命令
  13. Vue中watch监听数据变化以及watch中各属性详解
  14. 1.7更换JDK1.6版本后,无法启动eclipse mars解决办法。
  15. mongodb 索引1
  16. 0906--学成在线页面案例
  17. 【原创】PC微信逆向分析の强制输出微信调式信息
  18. 从作者的角度去阅读一本书-一种全新的阅读体验
  19. 【博客表情包】emoji和符号表情包
  20. Zookeeper和Kafka环境搭建总结

热门文章

  1. 怎样在xp下用上雅黑字体
  2. Linux systemctl 详解自定义 systemd unit
  3. Arithmetic第一篇:栈具有FILO(先进后出)的性质,已知栈的输入顺序为123,则输出有多少种
  4. SpringBoot笔记:SpringBoot集成JWT实战
  5. 【笔记补发20210403 第2次课】《Linuxprobe RHCE培训 第30期》TJ学员 师从刘遄
  6. 更进一步 | Android 12 Beta 2 发布
  7. 物联网与python的联系_python和物联网
  8. 触摸屏与三菱PLC之间无线MODBUS通讯实例
  9. 实用EXECL高级技能之考勤数据合并
  10. 2023最新FPS实时帧率iApp源码+实时显示屏幕帧率