网络传输工具cURL和libcurl
来源:互联网 发布:矢量数据特点 编辑:程序博客网 时间:2024/05/18 17:24
介绍
cURL是一个利用URL语法的文件传输工具,是基于libcurl的前端命令行工具。它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。 它同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传, 上载文件断点续传, http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。
除了使用curl命令行直接进行相关的网络操作,你也可以自由地使用libcurl,它是用C语言编写的,可以绑定到众多的编程语言中,如C,C++,PHP,Python,Perl,Java等等。你可以很方便地利用libcurl,在程序中进行一些网络传输工作,来代替一些语言的内置,使你的知识可重用。在Unix工作环境下,你可以用curl代替wget和ftp等工具,并能将这种学习经验迁移到将来使用libcurl来完成一些自动化任务。
curl是瑞典curl组织开发的,可以通过http://curl.haxx.se/来获取更详细的信息和下载文件。
除了使用curl命令行直接进行相关的网络操作,你也可以自由地使用libcurl,它是用C语言编写的,可以绑定到众多的编程语言中,如C,C++,PHP,Python,Perl,Java等等。你可以很方便地利用libcurl,在程序中进行一些网络传输工作,来代替一些语言的内置,使你的知识可重用。在Unix工作环境下,你可以用curl代替wget和ftp等工具,并能将这种学习经验迁移到将来使用libcurl来完成一些自动化任务。
curl是瑞典curl组织开发的,可以通过http://curl.haxx.se/来获取更详细的信息和下载文件。
从打开百度开始
curl "http://www.baidu.com"
在URL前后带上双引号总是个好习惯。避免当url中有&等符号时候的错乱。
curl 保存页面
curl "http://www.baidu.com" > /tmp/baidu.html
可以在浏览器中输入file:///tmp/baidu.html看到一张完整的百度首页。
当然下载页面用-o参数看上去更加高级一点。
curl -o /tmp/baidu2.html "http://www.baidu.com"
-s参数可以屏蔽进度条之类的输出,稍微清净点。
curl -s -o /tmp/baidu3.html "http://www.baidu.com"
libcurl中的一些c接口
curl_easy_setopt(curl, CURLOPT_URL, filename); //设置下载地址curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3);//设置超时时间curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);//设置写数据的函数curl_easy_setopt(curl, CURLOPT_WRITEDATA, str);//设置写数据的变量res = curl_easy_perform(curl);//执行下载
一个C语言实现上传文件的范例
#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库,以及编译环境。这篇文章只是起到一个向导的作用,运用curl的情况比如与云端对接,上传文件的时候用到。
0 0
- 网络传输工具cURL和libcurl
- 强大的网络传输工具cURL和libcurl
- 强大的网络传输工具cURL和libcurl
- Curl和libcurl使用
- libcurl和curl简介
- curl传输数据工具
- Linux命令之curl - 强大的网络传输工具
- Linux命令之curl - 强大的网络传输工具
- curl 和 libcurl 小技巧
- cocos2dx网络传输之CURL
- curl libcurl
- 基于 libcurl 的通用网络传输库的实现
- 基于 libcurl 的通用网络传输库的实现
- 使用 cURL 和 libcurl 通过 Internet 进行对话
- 使用 cURL 和 libcurl 通过 Internet 进行对话
- curl and libcurl 实现webqq httpget 和httppost
- libcurl 使用说明和网页抓取 linux下的curl编程
- curl->libcurl详解
- 第四届 山东省ACM Rescue The Princess(计算几何)
- Anaconda使用总结
- java程序设计初识
- JS img读取本地图片
- Your configuration does not allow connection to http://packagist.org
- 网络传输工具cURL和libcurl
- Android下不同CPU类型:armeabi和armeabi-v7a以及mips和x86
- 斐波那契数列
- DevExpress ChartControl控件实现图表
- Hive
- Android Studio如何打包签名
- Springmvc 配置thymeleaf 和jsp 双模板引擎
- 委托
- Mac 配置Spark环境scala+python版本(Spark1.6.0)