使用libcurl实现put访问服务器
2013-09-11 21:00
99 查看
Libcurl为一个免费开源的,客户端curl传输库,FTP,FTPS,TFTP,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE和LDAP,跨平台,支持Windows,Unix,Linux等,线程安全,支持Ipv6。并且易于使用。
关于libcurl具体用法:
1、初始化应用程序在使用libcurl之前,必须先初始化libcurl。libcurl只需初始化一次。可以使用以下语句进行初始化:
curl_global_init();
2、CURL *curl_easy_init() 此函数需要最先被调用,返回CRUL easy句柄;后续其他函数调用都要用到这个句柄。如果没有调用curl_global_init(),该函数自动调用,但是考虑到线程安全的问题,最好自己调用curl_global_init()。
3、参数和选项设置都是通过以下函数完成的,它告诉libcurl怎样去进行传输CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter)
参数handle即为curl_easy_init()返回的句柄,后 面根据option的类型,设置相应的parameter值,该函数每次调用只能设置一个选项。
4、curl_easy_perform 函数说明(error 状态码).该函数完成curl_easy_setopt指定的所有选项,本节重点介绍curl_easy_perform的返回值。返回0意味一切ok,非0代表错误发生。
通过以上的了解,实现文件的上传功能,即http的put功能。
代码如下:
转载自:http://blog.chinaunix.net/uid-27766566-id-3474454.html
关于libcurl具体用法:
1、初始化应用程序在使用libcurl之前,必须先初始化libcurl。libcurl只需初始化一次。可以使用以下语句进行初始化:
curl_global_init();
2、CURL *curl_easy_init() 此函数需要最先被调用,返回CRUL easy句柄;后续其他函数调用都要用到这个句柄。如果没有调用curl_global_init(),该函数自动调用,但是考虑到线程安全的问题,最好自己调用curl_global_init()。
3、参数和选项设置都是通过以下函数完成的,它告诉libcurl怎样去进行传输CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter)
参数handle即为curl_easy_init()返回的句柄,后 面根据option的类型,设置相应的parameter值,该函数每次调用只能设置一个选项。
4、curl_easy_perform 函数说明(error 状态码).该函数完成curl_easy_setopt指定的所有选项,本节重点介绍curl_easy_perform的返回值。返回0意味一切ok,非0代表错误发生。
通过以上的了解,实现文件的上传功能,即http的put功能。
代码如下:
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/stat.h> #include <unistd.h> #include <curl/curl.h> #include <curl/types.h> #include <curl/easy.h> #include <stdarg.h> #include <string.h> #include <errno.h> #include <check_error.h> FILE *fp; //定义FILE类型指针 //重写把数据读入上传数据流函数 size_t read_file(void* buff, size_t size, size_t nmemb, void* userp) { size_t sizes = fread(buff, size, nmemb, (FILE *)userp); return sizes; } int main(int argc,char **argv) { CURLcode res; //easy_handle定义的一些错误码 const char url[2096]; //初始化libcurl if(argc!=3) { printf("please input url and filename"); exit(-1); } res = curl_global_init(CURL_GLOBAL_ALL); if (res != CURLE_OK) { printf("init libcurl failed.\n" ); return -1; } //获取要上传的文件指针 FILE* r_file = fopen(argv[2], "rb"); if (0 == r_file) { printf( "the file %s isnot exit\n",argv[2]); return -1; } CURL* easy_handle; easy_handle = curl_easy_init(); if (0 == easy_handle) { printf( "get a easy_handle handle fail!"); fclose(r_file); curl_global_cleanup(); curl_easy_cleanup(easy_handle); return -1; } // 获取文件大小 fseek(r_file, 0, 2); int file_size = ftell(r_file); rewind(r_file); curl_easy_setopt(easy_handle, CURLOPT_URL, argv[1]); //获取URL地址 curl_easy_setopt(easy_handle, CURLOPT_UPLOAD, 1); //告诉easy_handle是做上传操作 curl_easy_setopt(easy_handle, CURLOPT_READFUNCTION, &read_file); //调用重写的读文件流函数 curl_easy_setopt(easy_handle, CURLOPT_READDATA, r_file); //往read_file()函数中传入用户自定义的数据类型 curl_easy_setopt(easy_handle, CURLOPT_INFILE, r_file); //定位作为上传的输入文件 curl_easy_setopt(easy_handle, CURLOPT_VERBOSE, 1); //打印出具体http协议字段 //curl_easy_setopt(easy_handle, CURLOPT_HEADER, 1); curl_easy_setopt(easy_handle, CURLOPT_INFILESIZE, file_size); //上传的字节数 //执行设置好的操作 res = curl_easy_perform(easy_handle); //获取HTTP错误码 int HTTP_flag = 0; curl_easy_getinfo(easy_handle, CURLINFO_RESPONSE_CODE , &HTTP_flag); //一般清理动作 fclose(r_file); curl_global_cleanup(); curl_easy_cleanup(easy_handle); printf("url :%s localfile: %s\n",argv[1],argv[2]); printf("HTTP_flag is %d\n",HTTP_flag); // printf( "操作本地文件: file_name url:\n"); //检测HTTP错误码和执行操作结果 if (CURLE_OK != res) { printf("failure\n"); return -1; } else { printf("success\n"); return 0; } }
转载自:http://blog.chinaunix.net/uid-27766566-id-3474454.html
相关文章推荐
- 使用libcurl实现put访问服务器
- 使用libcurl实现put访问服务器
- 关于使用nat123软件实现外网访问内网的部署在Tomcat服务器中的Java Web项目
- 使用 JS 访问服务器地址实现下载文件
- node.js使用(五):网站访问、搭建服务器及留言功能的实现
- 使用Apache HttpClient访问网络(实现手机端注册,服务器返回信息)
- Nginx学习-2 使用Nginx搭建HTML web服务器 实现SSL证书安全访问
- 访问远程Access数据库,使用SqlServer 2005的连接服务器实现
- 使用newifi路由器刷Openwrt Pandora后,树莓派实现外网访问,各种服务器搭建
- 使用libcurl实现简单的HTTP访问
- 使用Commons-net包实现ftp服务器的访问(转)
- Linux网络编程使用多进程实现服务器并发访问
- RHEL6---VSFTPD服务器配置之一:使用mysql实现虚拟用户的访问
- ORACLE使用dblink实现跨服务器访问数据
- libevent和libcurl实现http和https服务器 cJSON使用
- 使用Commons-net包实现ftp服务器的访问
- 使用webpack构建本地服务器,实现自动刷新,并直接在手机上访问
- 搭建Apache服务器并使用自签证书实现https访问
- 使用 LINQ To SQL 和实体框架实现灵活的数据访问