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

通常情况下,一般很少使用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:

 

File:  FileName:  

 

 

 

  1. <form action="fileUpload.action" method="post" enctype="multipart/form-data">    
  2.         File:<input type="file" name="sendfile" /><br>     
  3.         FileName:<input type="text" name="filename" /><br>     
  4.         <input type="submit" name="submit" value="Submit" />    
  5. </form> 

其中,fileUpload.action为文件处理文件上传的接口,根据实际需要配置,这里只是一个例子。

C语言HTTP上传文件的代码如下:

#include <stdio.h>  

#include <string.h>    

#include <curl/curl.h>

  
int main(int argc, char *argv[])  
{  
  CURL *curl;  
  CURLcode res;  
  
  struct curl_httppost *formpost=NULL; struct curl_httppost *lastptr=NULL; struct curl_slist *headerlist=NULL; static const char buf[] = "Expect:"; curl_global_init(CURL_GLOBAL_ALL); /* Fill in the file upload field */ curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "sendfile", CURLFORM_FILE, "D:\\sign.txt", CURLFORM_END); /* Fill in the filename field */ curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "filename", CURLFORM_COPYCONTENTS, "sign.txt", CURLFORM_END); /* Fill in the submit field too, even if this is rarely needed */ curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "submit", CURLFORM_COPYCONTENTS, "Submit", CURLFORM_END); curl = curl_easy_init(); /* initalize custom header list (stating that Expect: 100-continue is not wanted */ headerlist = curl_slist_append(headerlist, buf); if(curl) { /* what URL that receives this POST */ curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8080/fileUpload.action"); if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) ) /* only disable 100-continue header if explicitly requested */ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); /* then cleanup the formpost chain */ curl_formfree(formpost); /* free slist */ curl_slist_free_all (headerlist); } return 0; } 
 

代码经过测试,可以使用,但是需要提前配置好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

### 回答1: libcurl是一个开源的网络传输,可以用于上传文件。使用libcurl上传文件的步骤如下: 1. 初始化libcurl,创建一个curl对象。 2. 设置上传文件的URL地址、上传文件的路径和文件名。 3. 设置上传文件的选项,如上传文件的类型、上传文件的大小等。 4. 打开上传文件,读取文件内容。 5. 设置上传文件的回调函数,用于处理上传进度和上传结果。 6. 开始上传文件,等待上传完成。 7. 关闭上传文件,释放资源。 需要注意的是,上传文件的URL地址必须是支持HTTP或FTP协议的服务器地址,上传文件的路径和文件名必须是服务器上已存在的目录和文件名。另外,上传文件的大小不能超过服务器的限制,否则上传会失败。 ### 回答2: libcurl是一个支持发送和接收数据的C语言。它是一个开放源代码项目,可以轻松地对HTTP、FTP、SMTP、Telnet等协议进行数据传输。libcurl可以使用不同的协议来上传文件,例如HTTP协议。 在使用libcurl上传文件之前,我们需要在系统中安装libcurl,并包含相关头文件。接着,我们需要建立一个CURL合适的对象,它将被用于上传文件的连接。设置上传文件的URL、用户名、密码等属性。使用CURL函数来上传文件。接下来是具体的步骤: 1.建立一个CURL对象。 CURL* curl = curl_easy_init(); 2.设置上传文件的URL地址。 curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/uploadfile.php"); 3.设置用户名和密码,如果需要的话。 curl_easy_setopt(curl, CURLOPT_USERNAME, "user"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "password"); 4.打开并读取要上传的文件。 FILE *file = fopen("sample.txt", "rb"); if(file) { curl_easy_setopt(curl, CURLOPT_READDATA, file); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, filesize); } 5.执行上传请求。 res = curl_easy_perform(curl); 6.关闭CURL对象和上传的文件。 curl_easy_cleanup(curl); fclose(file); 通过以上步骤,我们可以成功地使用libcurl上传文件。需要注意的是,如果有需要,还需要进行错误处理和数据格式验证。同时,我们还可以使用CURLOPT_POSTFIELDS来上传表单数据,或者使用sftp协议上传文件等等。 总之,libcurl提供了一种方便而高效的方式来上传文件,可以帮助我们更好地完成数据传输。 ### 回答3: libcurl是一个功能强大的网络传输,可以完成各种网络传输操作。其中之一就是上传文件。下面将介绍如何使用libcurl上传文件。 1. 准备上传文件 首先,我们需要准备要上传的文件。可以使用标准的文件操作函数(如fopen、fread等)读取文件内容,然后存入一个缓冲区,用于后续上传操作。 2. 初始化libcurl 在使用libcurl之前,我们需要进行一些初始化工作。主要包括调用curl_global_init()来初始化,在上传操作完成后,再调用curl_global_cleanup()来清理工作。 3. 创建上传句柄 接下来,我们需要创建一个curl的句柄,用于执行上传操作。可以使用curl_easy_init()函数来创建句柄。创建句柄成功后,我们可以设置相关的选项,如上传的URL、用户名密码等等。 4. 设置上传选项 在创建句柄之后,我们需要设置一些上传选项。主要包括以下几个: (1) CURLOPT_UPLOAD:设置为1,表示要进行上传操作。 (2) CURLOPT_READFUNCTION:读取数据的回调函数,用于把要上传的文件数据传给libcurl。 (3) CURLOPT_READDATA:读取数据的回调函数中传入的参数。 (4) CURLOPT_INFILESIZE:要上传的文件大小。 (5) CURLOPT_URL:要上传到的URL地址。 (6) CURLOPT_USERPWD:上传所需的用户名密码。 5. 执行上传操作 设置完选项后,我们可以调用curl_easy_perform()函数来执行上传操作,上传的数据将会通过之前设置的回调函数进行处理。如果上传成功,该函数将返回CURLE_OK,否则将返回其他错误码。 6. 释放句柄和清理工作 上传完成后,我们需要释放上传句柄,并做一些清理工作。可以使用curl_easy_cleanup()函数来释放句柄,调用curl_global_cleanup()来清理工作。 总结一下,使用libcurl上传文件需要以下几个步骤: 1. 准备要上传的文件。 2. 初始化libcurl。 3. 创建上传句柄,并设置上传选项。 4. 执行上传操作。 5. 释放句柄和清理工作。 以上便是使用libcurl上传文件的步骤,对于需要上传文件的网络应用程序来说,使用libcurl可以大大简化上传文件的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值