curl入门教程

平时进行文件传输的时候一般首先想到的是搭建文件传输服务器(这里不讨论微信QQ飞鸽),常见的文件传输服务器一般是ftp、http、samba。windows下一般就是登陆上相关服务器Ctrl-C或者右键另存为,但是习惯了linux命令行操作后会想到wgetcurl,这里要说的是curl,因为最近写代码时用到了libcurl,再就是wget好像只能下载用。

curl命令用法

Curl作为数据传输工具强到令人发指,下面先引用两段:

curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。百度百科
curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。linux命令大全

curl命令的使用方法就参考上面提到的两篇文章吧。下面记录一下在微服务大行其道的今天如何用curl进行RESTful接口调用

测试REST接口

请求方法为get:

1
$ curl -X GET -i 'http://localhost/person?id=1'

请求方法为post:

1
curl -X POST -i 'http://localhost/person?id=1'

带post字段的请求:

1
curl -X POST -i http://localhost/person --data 'name=aaa&age=33'

带http头字段的请求:

1
curl -X POST -H 'Content-Type: application/json' -i http://localhost/person --data '{name:"aaa",age:33,children:["x","y","z"]}'

这些命令用做测试REST足够了,但是要在程序中调用就要用到libcurl了

windows下编译curl

我写在简书上的文章

下载
curl目前最新版本是7.59.0,要下载其他版本的可以到https://curl.haxx.se/download/?C=M;O=D

vc编译

我的开发环境是vs2008,对应vc9,在源码curl-7.59.0\projects\Windows\VC9目录下有相关工程文件,用vs2008打开就能编译,这里不写了。

命令行编译方法:

1
2
$ cd curl-7.59.0/winbuild
$ nmake /f Makefile.vc mode=static vc=9 ENABLE_IDN=no debug=no

成功后在curl-7.59.0/builds/libcurl-vc9-x86-release-static-ipv6-sspi-winssl产生相关文件。

测试curl,curl http://www.baidu.com

测试libcurl:

  1. 用vs2008建立vc工程,编写测试代码
  2. 引入libcurl_a.lib
  3. 增加宏定义CURL_STATICLIB
  4. 修改运行时库/md

更多例子代码

mingw编译libcurl

以前要单独安装mingw,现在有了git方便多了。

1
2
3
打开GitBash
$ cd curl-7.59.0
$ mingw32-make mingw32

完成后在lib目录下有3个文件,分别是:

  • libcurl.a 静态库
  • libcurl.dll 动态库
  • libcurldll.a 动态倒入库

测试一下抄来的

1
2
$ gcc -I../../include -L../../lib simple.c -lcurldll
$ gcc -I../../include -L../../lib simple.c -DCURL_STATICLIB -lcurl -lws2_32 -lwldap32

qt下使用libcurl

这是我qt工程文件修改的部分:

1
2
3
INCLUDEPATH += D:/aaa_lcy/tmp/my-curl/curl-7.59.0/include/curl
LIBS += D:/aaa_lcy/tmp/my-curl/curl-7.59.0/lib/libcurl.a -lws2_32 -lwldap32
DEFINES += CURL_STATICLIB

其他

linux下就不说了,mingw本身就是模拟linux