curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。
一、最新版本
你可以在官网上了解到curl
的开发的最新情况,并下载到最新版本的程序。
二、相对简单的用法
1、从Netscape的网页服务器上获得该网站的主页:
curl http://www.netscape.com/
2、从futnet的ftp
服务器的用户主目录获得指定文件:README
curl ftp://ftp.funet.fi/README
- 1
3、使用服务器的8000
端口获得web主页:
curl http://www.weirdserver.com:8000/
- 1
4、列出ftp站点目录中的文件:
curl ftp://cool.haxx.se/
- 1
5、从字典查询网站获得词条curl
的定义:
curl dict://dict.org/m:curl
- 1
6、次性操作取得二份文档:
curl ftp://cool.haxx.se/ http://www.weirdserver.com:8080/
- 1
7、从FTPS
服务器上获取文件:
curl ftps//files.are.secure.com/secrets.txt
- 1
或者使用推荐的方法访问FTPS
服务器来执行相同的操作:
curl --ftp-ssl ftp//files.are.secure.com/secrets.txt
- 1
8、使用SFTP
从一个SSH
服务器上获取一份文件:
curl -u username sftp://example.com/etc/issue
- 1
9、从一台使用私钥认证(私钥未使用密码保护)的SSH
服务器上使用SCP
获取一份文件:
curl -u username: --key ~/.ssh/id_rsa \
scp://example.com/~/file.txt
- 1
- 2
10、从一台使用私钥认证(私钥使用密码保护)的SSH
服务器上使用SCP
获取一份文件:
curl -u username: --key ~/.ssh/id_rsa --pass private_key_password \
scp://example.com/~/file.txt
- 1
- 2
11、从一台使用IPv6
的网页服务器上获得站点主页:
curl "http://[2001:1890:1112:1::20]/"
- 1
12、从一台Samba
文件服务器上获得文件:
curl -u "domain\username:passwd" smb://server.example.com/share/file.txt
- 1
三、下载文件
1、从网页服务器上下载一个web页面到当前目录中,并重新指定文件名:
curl -o thatpage.html http://www.netscape.com/
- 1
2、从网页服务器上下载一个文件存储到本地,但不重新指定文件名:
这种情况下,需要在URL中指定待下载的文件名,否则将下载失败
curl -O http://www.netscape.com/index.html
- 1
3、使用原文件名一次性从服务器上下载二份文件:
curl -O www.haxx.se/index.html -O curl.haxx.se/download.html
- 1
四、使用密码
1、FTP
对于ftp文件来说,应当加用户名和密码加入到URL地址中,用法如下:
curl ftp://name:passwd@machine.domain:port/full/path/to/file
- 1
或者使用参数-u
来指定用户名和密码,用法如下:
curl -u name:passwd ftp://machine.domain:port/full/path/to/file
- 1
2、FTPS
FTPS使用密码的方式与FTP的用法很像,只不过是要指定参数--ftp-ssl
来进行加密认证而已。
注意:使用FTPS://
为前缀是以一种‘暗示’的对服务器进行访问标准方法;当然,你也可以使用‘明示’的方法,用FTP://
前缀,配合参数--ftp-ssl
使用。
3、SFTP/SCP
和FTP
使用方法类似,但是你需要使用参数--key
来指定私钥文件来代替系统密码。需要注意的是,私钥文件本身也可以使用密码进行保护,但这个密码并不是远程服务器的登录密码。私钥文件本身的密码需要通过参数--pass
来进行指定。一般情况一下,curl
会自动地从私钥文件中提取公钥,但是curl
在没有适当的目录支持的情况下,则必须使用参数--plukey
来指定与私钥匹配的公钥文件。
4、HTTP
Curl
同样支持在HTTP``URL
中使用用户名和密码,因此你可以使用下面的方法从服务上获取文件:
curl http://name:passwd@machine.domain/full/path/to/file
- 1
或者另行使用参数来指定用户名和密码:
curl -u name:passwd http://machine.domain/full/path/to/file
- 1
在HTTP提供的诸多认证方式中,curl
支持下列认证:Basic
, Digest
, NTLM
和 Negotiate
(SPNEGO)。在未指定任何认证方式的情况下,curl
默认使用Basic
。你可以通过使用‘–anyauth’来告诉curl
使用何种服务器能够接受的加密方式来访问指定的URL地址。
注意:根据URL
的要求,HTTP
URLs
是不能包含用户名和密码的。因此curl
在使用代理的情况下是无法以这种方式正常工作的,即使curl
有时候是允许这样操作的。当使用代理的情况下,你必须使用参数-u
来指定用户和密码。
5、HTTPS
HTTPS可能是私钥认证最觉的方式,具体内容见下文。
五、代理
curl
同时支持HTTP
和SOCKS
代理服务器,并且可以指定适当的认证方式。因为没有相应的标准,所以curl
并没有对FTP
代理服务器进行特殊的设置,但是curl
也可以大部分的FTP
代理服务器下正常工作。你可以使用HTTP
或者SOCKS
代理从FTp
服务器上下载和上传文件。
1、使用名为my-proxy
的HTTP
代理服务器,通过888
端口,从一台FTP
服务器上下载指定文件:
curl -x my-proxy:888 ftp://ftp.leachsite.com/README
- 1
2、使用上面的代理服务器,通过用户名和密码从指定的HTTP
服务器上下载文件:
curl -u user:passwd -x my-proxy:888 http://www.get.this/
- 1
3、一些代理服务器要求指定认证方式。所以上面的命令需要将-u
改为-U
:
curl -U user:passwd -x my-proxy:888 http://www.get.this/
- 1
4、用逗号分隔的主机或者域名列表中,如果有不使用代理服务器的,应如下指定:
curl --noproxy localhost,get.this -x my-proxy:888 http://www.get.this/
- 1
5、如果使用--proxy1.0
代替--proxy
或者-x
来指定代理服务器的工作协议,那么curl
将使用HTTP/1.0
代替 HTTP/1.1
来尝试进行任何连接。
6、curl
使用参数--socks4
和--socks5
来支持SOCKS4
和SOCKS5
代理
可以参见Curl
所支持的环境变更,来针对代理服务进行高级设置。
7、从FTP客户端的角度来看,大部分的FTP代理服务器都被设置为类似于普通的FTP服务器,这些服务器需要通过特殊的命令来选择远程服务器。
curl
支持使用-u
,-Q
和--ftp-account
选项来设置通过大多数FTP代理来文件远程服务器。
举例:使用相关参数,通过FTP
代理服务器,向远程FTP
服务器上传一份文件:
curl -u "Remote-FTP-Username@remote.ftp.server Proxy-Username:Remote-Pass" \
--ftp-account Proxy-Password --upload-file local-file \
ftp://my-ftp.proxy.server:21/remote/upload/path/
- 1
- 2
- 3
查看你的FTP代理服务器手册来设置与之匹配的文件传输,并使用curl
的-v
选项来查看curl
的传输内容。
六、范围
HTTP 1.1
引入了字节范围。通过这个功能,客户端可以要求只获取一个指定文件的一部分内容。curl
通过参数-r
来支持此功能。
1、获取一份文件的前100个字节:
curl -r 0-99 http://www.get.this/
- 1
2、获取一份文件最后500个字节:
curl -r -500 http://www.get.this/
- 1
3、Curl
同时也支持下载FTP
服务器上的文件的一定范围内的内容.
你可以指定文件的开始和结束的位置。
从FTP
服务器上获取一份文件的前100个字节的内容:
curl -r 0-99 ftp://www.get.this/README
- 1
七、上传
(一)、FTP / FTPS / SFTP / SCP
1、上传标准输入的所有数据到指定服务器:
curl -T - ftp://ftp.upload.com/myfile
- 1
2、使用用户名和密码,上传指定文件到服务器上(在URL中指定远程文件名称):
curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile
- 1
3、将本地文件上传到远程站点,远程服务器上的文件使用与本地文件相同的文件名:
curl -T uploadfile -u user:passwd ftp://ftp.upload.com/
- 1
4、将待上传的文件追加指定的远程文件之后:
curl -T localfile -a ftp://ftp.upload.com/remotefile
- 1
5、curl
也支持使用代理来完成文件上传到ftp
,但是只有在代理服务器已经被配置为允许此类型的通道时才可以完成传输。如果代理服务器支持话,你就可以使用与下面命令类似的命令来完成文件的上传:
curl --proxytunnel -x proxy:port -T localfile ftp.upload.com
- 1
(二)、SMB / SMBS
curl -T file.txt -u "domain\username:passwd" smb://server.example.com/share/
- 1
(三)、HTTP
**上传标准输入的所有数据到指定的HTTP
站点:
curl -T - http://www.upload.com/myfile
- 1
注意:HTTP
服务器必须被事先配置为接受PUT
, 上述命令才能被成功的执行。
对于HTTP
数据上传的其他方式,请参见POST
的相关内容。
八、VERBOSE / DEBUG
如果curl
没有按照预想的方式运行,或者服务器拒绝你的访问,再或者你根本看不懂反馈信息,请使用参数-v
来获取完成的运行信息。curl
将输出大量的发送和接收信息,来让用户查看所有的客户端和服务器的交互内容,但它并不会显示你的真实数据。
curl -v ftp://ftp.upload.com/
- 1
如果还想从curl
获得更为详尽的信息,请尝试使用参数--trace
或者--trace-ascii
同时指定日志文件的名称:
curl --trace trace.txt www.haxx.se