先放上libcurl官方文档:链接

第一步:全局初始化

#include <curl/curl.h>
CURLcode curl_global_init(long flags );

在使用libcurl库的时候需要运行上面的函数生成所需要的环境。这个函数在整个程序进程当中只能运行一次。相对应的是curl_global_cleanup :用来清除环境。常用的falgs为下面几个。

  1. CURL_GLOBAL_ALL:初始化所有条件,建议使用这个默认值
  2. CURL_GLOBAL_SSL:初始化 SSL相关条件
  3. CURL_GLOBAL_WIN32 :初始化 Win32 socket 库

更多的可以参考官方技术文档。


第二步:创建单个句柄

此处为了简单选用easy接口为例,对于multi接口也类似,详细可以查看官方技术文档。

如果你只是需要使用默认参数只需要执行下面的函数

easyhandle = curl_easy_init();

如果需要修改里面的参数可以利用curl_easy_setopt 函数自定义生成自己的句柄。以http请求为例(其他例如FTP、TFTP、SMTP等见官方文档)例如:

curl_easy_setopt(*easyhandle,CURLOPT_POST,1L);//设置利用http的方法为post
curl_easy_setopt(*easyhandle,CURLOPT_POSTFIELDS,*send_buf);//设置需要发送的数据,send_buf里面存放了需要发送的数据。数据格式需要为网站能够解析的格式,因为libcurl不会编解码数据。
curl_easy_setopt(*easyhandle,CURLOPT_TIMEOUT,TIME——OUT);//用于设置传输时间
curl_easy_setopt(*easyhandle,CURLOPT_URL,URL);//设置利用http请求链接

上面的参数根据自己需要设置,下面是http一些其他参数的意思:

  1. CURLOPT_WRITEFUNCTION,CURLOPT_WRITEDATA:通过设定一个回调函数,执行libcurl在接受到数据后用户想进行的操作,通常函数多做数据保存的功能,如处理下载文件。
  2. CURLOPT_WRITEDATA 用于表明CURLOPT_WRITEFUNCTION函数中的stream指针的来源,说白了就是设定回调函数的第四个参数的数据类型。回调函数原型为:size_t function( void *ptr, size_t size, size_t nmemb, void *stream);
  3. CURLOPT_UPLOAD:就是让libcurl做好上传的准备。如果传输协议是http的话,uoload就是发送put。
  4. CURLOPT_SSL_VERIFYPEER:该函数多用于设定curl忽略对网站证书的检查(不管忽略不忽略,curl都是检查的)。
  5. CURLOPT_HTTPGET: 将curl向服务器交互数据的方式改变为get

第三步: 连接远程网站

 success = curl_easy_perform(easyhandle);

第四步: 获取返回数据

#include <curl/curl.h>
CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );

第五步: 结束单个句柄处理

#include <curl/curl.h>
void curl_easy_cleanup(CURL * handle );

步骤二到步骤五为一个链接处理过程,整个程序当中可以设置成循环执行步骤二到步骤五来处理多个链接。


第六步: 结束整个处理

#include <curl/curl.h>
void curl_global_cleanup(void);

结束整个处理流程之后调用此函数,清除整个环境,释放资源。

libcurl库浅析的更多相关文章

  1. C++ 用libcurl库进行http通讯网络编程

    使用libcurl完成http通讯,很方便而且是线程安全,转载一篇比较好的入门文章 转载自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724 ...

  2. C++ 用libcurl库进行http通讯网络编程(转)

    转载:http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三. ...

  3. Cocos2d-x移植到WindowsPhone8移植问题-libcurl库移植问题

    在Cocos2d-x 3.x最新版本中提供了Windows Phone 8平台移植libcurl库所需要的头文件和库文件.但要在Windows Phone 8平台成功移植libcurl库还是很不容易, ...

  4. Cocos开发中Visual Studio下libcurl库开发环境设置

    我们介绍一下win32中Visual Studio下libcurl库开发环境设置.Cocos2d-x引擎其实已经带有为Win32下访问libcurl库,Cocos2d-x 3.x中libcurl库文件 ...

  5. C++ 用libcurl库进行http通讯网络编程[转]

    http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.cur ...

  6. C/C++ 用libcurl库进行http通讯网络编程

    C/C++ 用libcurl库进行http通讯网络编程 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_p ...

  7. C语言 HTTP上传文件-利用libcurl库上传文件

    原文  http://justwinit.cn/post/7626/ 通常情况下,一般很少使用C语言来直接上传文件,但是遇到使用C语言编程实现文件上传时,该怎么做呢? 借助开源的libcurl库,我们 ...

  8. C++ 用libcurl库进行http 网络通讯编程

      一.LibCurl基本编程框架libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcur ...

  9. HTTP多线程下载+断点续传(libcurl库)

    目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_perform 函数说明(error 状态码) 五.lib ...

随机推荐

  1. TRANK和VTP

    需求:因为公司规模逐渐扩大,出现相同部门不同办公室的情况,老板提出新的要求:相同部门可以通信,不同部门不能通信. 利用vlan: 缺点:浪费材料,应用技术手段把两条交叉线变成一条. 因此,引进trun ...

  2. java多线程回顾1:线程的概念与创建

    1.进程与线程的概念 现在几乎所有操作系统都支持多任务,通常一个任务就是一个程序,一个运行中的程序就是一个进程.当一个程序行时,其内部也可能在执行多个任务,进程内每一个任务的执行流,就是一个线程. 所 ...

  3. T-SQL Part XII: Access Remote SQL Server

    要链接远程的SQL Server,需要一下几个步骤(以下的步骤都是在远程系统上进行): 确认远程SQL Server所监听的端口号 官方的文档是使用SQL Server Configuration M ...

  4. Python基础之JSON

    作用 对Python对象进行序列化,便于存储和传输 Python对象与JSON字符串相互转换 Python对象转JSON字符串 import json data = [ { 'a' : 1, 'b' ...

  5. 【实战】如何通过html+css+mysql+php来快速的制作动态网页(以制作一个博客网站为列)

    一.开发环境的搭建 (1)apache+php+mysql环境搭建 因为要用apache来做服务器,mysql作为数据库来存储数据,php来写代码以此实现网页与数据库的交互数据,所以需要下载上述软件, ...

  6. java编程思想第四版第六章总结

    1. 代码重构 为什么f要代码重构 第一次代码不一定是完美的, 总会发现更优雅的写法. 代码重构需要考虑的问题 类库的修改不会破坏客户端程序员的代码. 源程序方便扩展和优化 2. 包 创建一个独一无二 ...

  7. nyoj 18-The Triangle(动态规划)

    18-The Triangle 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:5 submit:5 题目描述: 7 3 8 8 1 0 2 7 4 ...

  8. Linux系统时间\硬件时间(date、tzselect、clock、hwclock、ntpdate)

    1.系统时间和硬件时间 在Linux中有硬件时钟与系统时钟两种时钟.硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟.系统时钟则是指kernel中的时钟.所有Linux相关指令与函 ...

  9. 【01】主函数main

    java和C#非常相似,它们大部分的语法是一样的,但尽管如此,也有一些地方是不同的. 为了更好地学习java或C#,有必要分清它们两者到底在哪里不同. 首先,我们将探讨主函数main. java的主函 ...

  10. 20191114-2 Beta事后诸葛亮会议

    此作业要求:http://edu.cnblogs.com/campus/nenu/2019fall/homework/10005 组名:扛把子 组长:孙晓宇 组员:宋晓丽.梁梦瑶.韩昊.刘信鹏 扛把子 ...