curl 使用实例详解

一、最新版本

你可以在官网上了解到curl的开发的最新情况,并下载到最新版本的程序。

二、相对简单的用法

1、从Netscape的网页服务器上获得该网站的主页:

curl http://www.netscape.com/

2、从futnet的ftp服务器的用户主目录获得指定文件:README

curl ftp://ftp.funet.fi/README

3、使用服务器的8000端口获得web主页:

curl http://www.weirdserver.com:8000/

4、列出ftp站点目录中的文件:

curl ftp://cool.haxx.se/

5、从字典查询网站获得词条curl的定义:

curl dict://dict.org/m:curl

6、次性操作取得二份文档:

curl ftp://cool.haxx.se/ http://www.weirdserver.com:8080/

7、从FTPS服务器上获取文件:

curl ftps//files.are.secure.com/secrets.txt

或者使用推荐的方法访问FTPS服务器来执行相同的操作:

curl --ftp-ssl  ftp//files.are.secure.com/secrets.txt

8、使用SFTP从一个SSH服务器上获取一份文件:

curl -u username sftp://example.com/etc/issue

9、从一台使用私钥认证(私钥未使用密码保护)的SSH服务器上使用SCP获取一份文件:

curl -u username: --key ~/.ssh/id_rsa \
scp://example.com/~/file.txt

10、从一台使用私钥认证(私钥使用密码保护)的SSH服务器上使用SCP获取一份文件:

curl -u username: --key ~/.ssh/id_rsa --pass private_key_password \
scp://example.com/~/file.txt

11、从一台使用IPv6的网页服务器上获得站点主页:

curl "http://[2001:1890:1112:1::20]/"

12、从一台Samba文件服务器上获得文件:

curl -u "domain\username:passwd" smb://server.example.com/share/file.txt

三、下载文件

1、从网页服务器上下载一个web页面到当前目录中,并重新指定文件名:

curl -o thatpage.html http://www.netscape.com/

2、从网页服务器上下载一个文件存储到本地,但不重新指定文件名:

这种情况下,需要在URL中指定待下载的文件名,否则将下载失败

curl -O http://www.netscape.com/index.html

3、使用原文件名一次性从服务器上下载二份文件:

curl -O www.haxx.se/index.html -O curl.haxx.se/download.html

四、使用密码

1、FTP

对于ftp文件来说,应当加用户名和密码加入到URL地址中,用法如下:

curl ftp://name:[email protected]:port/full/path/to/file

或者使用参数-u来指定用户名和密码,用法如下:

curl -u name:passwd ftp://machine.domain:port/full/path/to/file

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:[email protected]/full/path/to/file

或者另行使用参数来指定用户名和密码:

curl -u name:passwd http://machine.domain/full/path/to/file

在HTTP提供的诸多认证方式中,curl支持下列认证:Basic, Digest, NTLMNegotiate (SPNEGO)。在未指定任何认证方式的情况下,curl默认使用Basic。你可以通过使用‘–anyauth’来告诉curl使用何种服务器能够接受的加密方式来访问指定的URL地址。
注意:根据URL的要求,HTTP URLs是不能包含用户名和密码的。因此curl在使用代理的情况下是无法以这种方式正常工作的,即使curl有时候是允许这样操作的。当使用代理的情况下,你必须使用参数-u来指定用户和密码。

5、HTTPS

HTTPS可能是私钥认证最觉的方式,具体内容见下文。

五、代理

curl同时支持HTTPSOCKS代理服务器,并且可以指定适当的认证方式。因为没有相应的标准,所以curl并没有对ftp代理服务器进行特殊的设置,但是curl也可以大部分的ftp代理服务器下正常工作。你可以使用HTTP或者SOCKS代理从ftp服务器上下载和上传文件。

1、使用名为my-proxyHTTP代理服务器,通过888端口,从一台ftp服务器上下载指定文件:

curl -x my-proxy:888 ftp://ftp.leachsite.com/README

2、使用上面的代理服务器,通过用户名和密码从指定的HTTP服务器上下载文件:

curl -u user:passwd -x my-proxy:888 http://www.get.this/

3、一些代理服务器要求指定认证方式。所以上面的命令需要将-u改为-u

curl -u user:passwd -x my-proxy:888 http://www.get.this/

4、用逗号分隔的主机或者域名列表中,如果有不使用代理服务器的,应如下指定:

curl --noproxy localhost,get.this -x my-proxy:888 http://www.get.this/

5、如果使用--proxy1.0代替--proxy或者-x来指定代理服务器的工作协议,那么curl将使用HTTP/1.0代替 HTTP/1.1来尝试进行任何连接。

6、curl使用参数--socks4--socks5来支持SOCKS4SOCKS5代理

可以参见curl所支持的环境变更,来针对代理服务进行高级设置。

7、从FTP客户端的角度来看,大部分的FTP代理服务器都被设置为类似于普通的FTP服务器,这些服务器需要通过特殊的命令来选择远程服务器。

curl支持使用-u,-Q--ftp-account选项来设置通过大多数FTP代理来文件远程服务器。
举例:使用相关参数,通过ftp代理服务器,向远程ftp服务器上传一份文件:

curl -u "[email protected] Proxy-Username:Remote-Pass" \
--ftp-account Proxy-Password --upload-file local-file \ 
ftp://my-ftp.proxy.server:21/remote/upload/path/

查看你的FTP代理服务器手册来设置与之匹配的文件传输,并使用curl-v选项来查看curl的传输内容。

六、范围

HTTP 1.1引入了字节范围。通过这个功能,客户端可以要求只获取一个指定文件的一部分内容。curl通过参数-r来支持此功能。
1、获取一份文件的前100个字节:

curl -r 0-99 http://www.get.this/

2、获取一份文件最后500个字节:

curl -r -500 http://www.get.this/

3、curl同时也支持下载ftp服务器上的文件的一定范围内的内容.

你可以指定文件的开始和结束的位置。
ftp服务器上获取一份文件的前100个字节的内容:

curl -r 0-99 ftp://www.get.this/README

七、上传

(一)、FTP / FTPS / SFTP / SCP

1、上传标准输入的所有数据到指定服务器:

curl -T - ftp://ftp.upload.com/myfile

2、使用用户名和密码,上传指定文件到服务器上(在URL中指定远程文件名称):

curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile

3、将本地文件上传到远程站点,远程服务器上的文件使用与本地文件相同的文件名:

curl -T uploadfile -u user:passwd ftp://ftp.upload.com/

4、将待上传的文件追加指定的远程文件之后:

curl -T localfile -a ftp://ftp.upload.com/remotefile

5、curl也支持使用代理来完成文件上传到ftp,但是只有在代理服务器已经被配置为允许此类型的通道时才可以完成传输。如果代理服务器支持话,你就可以使用与下面命令类似的命令来完成文件的上传:

curl --proxytunnel -x proxy:port -T localfile ftp.upload.com

(二)、SMB / SMBS

curl -T file.txt -u "domain\username:passwd" smb://server.example.com/share/

(三)、HTTP

**上传标准输入的所有数据到指定的HTTP站点:

curl -T - http://www.upload.com/myfile

注意:HTTP服务器必须被事先配置为接受PUT, 上述命令才能被成功的执行。
对于HTTP数据上传的其他方式,请参见POST的相关内容。

八、VERBOSE / DEBUG

如果curl没有按照预想的方式运行,或者服务器拒绝你的访问,再或者你根本看不懂反馈信息,请使用参数-v 来获取完成的运行信息。curl将输出大量的发送和接收信息,来让用户查看所有的客户端和服务器的交互内容,但它并不会显示你的真实数据。

curl -v ftp://ftp.upload.com/

如果还想从curl获得更为详尽的信息,请尝试使用参数--trace或者--trace-ascii 同时指定日志文件的名称:

相关推荐