[实践OK]C语言 HTTP上传文件-利用libcurl库上传文件, curl连接超时的问题 特别是获取返回头及内容的c写法。

jackxiang 2014-11-14 14:09 | |
curl是Linux下一个非常著名的下载库,通过这个库,可以很简单的实现文件的下载等操作。
一、看一个简单的例子(学习其用static字符串数组和指针的返回判断这块值得学习并记住):


二、分为header和包体数据两个回调指针:




整个代码如下:

From:
http://www.ithao123.cn/content-1085192.html

curl连接超时的问题:
CURLOPT_TIMEOUT  设置cURL允许执行的最长秒数。  
CURLOPT_TIMEOUT_MS  设置cURL允许执行的最长毫秒数。
CURLOPT_CONNECTTIMEOUT  在发起连接前等待的时间,如果设置为0,则无限等待。  
CURLOPT_CONNECTTIMEOUT_MS  尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。

CURLOPT_CONNECTTIMEOUT 与 CURLOPT_CONNECTTIMEOUT_MS 类似,可以理解成等待连接成功创建的时间.
来自:http://blog.chinaunix.net/uid-2270658-id-302245.html
超时这一块还应该注意在不同的curl里存在毫秒,而上线后可能curl版本较低不支持毫秒,于是出现没有发出请求的问题:
来自:http://www.vimer.cn/2012/01/%E5%85%B3%E4%BA%8Elibcurl%E4%B8%8D%E5%8F%91%E5%8C%85%E7%9A%84bug%E5%AE%9A%E4%BD%8D.html

使用libcurl库可以实现HTTP和FTP的请求,以前对http协议进行过学习,但一直无法很好的解决阻塞问题,认识了libcurl后方觉相见恨晚,因为http阻塞的问题已经困扰了我两年了。
虽然编译出来的libcurl.lib足有700多K,但libcurl库的使用却很简单,只有熟悉curl_easy_setopt这个函数就可以了。该函数的作用是设置请求的相关参数来让curl构造协议头或返回指定的数据。
//返回HTTP协议头
curl_easy_setopt( curl, CURLOPT_HEADER, 1 );
//超时设置(单位:秒),如果在指定时间内没数据可接收则超时
curl_easy_setopt( curl, CURLOPT_TIMEOUT, 3 );
//连接超时,不过只适用于Unix系统,Windows系统应该就是使用CURLOPT_TIMEOUT
curl_easy_setopt( curl, CONNECTTIMEOUT, 3 );
//设置请求Cookie
curl_easy_setopt( curl, CURLOPT_COOKIE, cookie );
//返回Cookie
curl_easy_setopt( curl, CURLOPT_COOKIEJAR, cookie );

来自:http://blog.chinaunix.net/uid-2270658-id-247815.html

通常情况下,一般很少使用C语言来直接上传文件,但是遇到使用C语言编程实现文件上传时,该怎么做呢?

      借助开源的libcurl库,我们可以容易地实现这个功能。Libcurl是一个免费易用的客户端URL传输库,主要功能是用不同的协议连接和沟通不同的服务器,libcurl当前支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP,IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet andTFTP。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证等。下面借鉴libcurl官网的例子完成简单的文件上传。

模拟要实现的文件上传FORM:


      其中,fileUpload.action为文件处理文件上传的接口,根据实际需要配置,这里只是一个例子。
      C语言HTTP上传文件的代码如下:


代码经过测试,可以使用,但是需要提前配置好Libcur库,以及编译环境,这个自行google。代码很粗糙,功能很简单,只是起个抛砖引玉的作用,希望能对大家有所帮助。
来自:http://blog.csdn.net/sxwyf248/article/details/7984776
VC2013下,使用curl:
http://www.tuicool.com/articles/A73ARr
较细:http://blog.csdn.net/mjpassion/article/details/6290912
Visual2012:http://www.howzhi.com/course/3387/lesson/43112
参考:http://www.cppblog.com/len/archive/2008/06/21/54229.html
使用libcurl模拟form表单上传的问题:
http://bbs.csdn.net/topics/390817077
在C语言程序中使用cURL库(libcurl):
http://demon.tw/programming/c-libcurl.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/7626/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2016-1-18 14:53
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]