curl 使用举例详解

 

 

原文标题为:Manual – curl usage explained

十三、COOKIES

Cookies一般用于在Web服务端保持客户端的状态信息。服务器会通过在网页的头信息中加入一行来发送cookes,其内容如Set-Cookie: <data>, 其中data部分的值通常包含一系列的NAME=VALUE的值,多个值之间用分号;隔开,如”NAME1=VALUE1; NAME2=VALUE2;”。服务器还可以通过设置path=value来指定cookies值的路径,cookies何时过期(expire=DATE),使用什么域名(domain=NAME)以及是否应该在安全的连接下来使用cookies(secure)。

如果你从服务器收到一个页面,其头部中包含如下内容:

Set-Cookie: sessionid=boo123; path="/foo";

这就意味着在我们想从以/foo开始的路径获取相关信息的时间,服务器需要取得的第一个赋值对

例如,一个页面想要从一个cookie中获取我的姓名, 使用curl,应输入如下命令:

curl -b "name=Daniel" www.sillypage.com

curl也可以使用在之前的会话收到的cookies。如果你想从服务器获取cookies并将他们保存到本地的一个文件中,应该使用如下的命令:

curl --dump-header headers www.example.com

然后你就可以使用从页面头部获得的cookies,再次连接这个站点或者其他站点了:

curl -b headers www.example.com

虽然能过将页面的头部存储到本地文件中来实现cookies的存储是一个有效的方法,但是因为容易出错,所以我们不推荐使用这种方法来进行相关操作。取而代之的方法是使用curl将取回的cookies以众所周知的netscape cookie的格式进行保存,具体方法如下:

curl -c cookies.txt www.example.com

需要注意的是,通过使用-b你可以开启cookie awareness, 同时配合 -L使用,你可以让curlcookie存储到一个指定的位置(通常这个位置与cookies结合在一起使用)。这样,如果一个站点需要同时发送cookies及其位置的话,你就可以使用并不存在的文件来激活cookie awareness了,具体方法如下:

curl -L -b empty.txt www.example.com

被读取cookies的文件必须是以经过格式化的HTTP头部的文件,或者是netscape样式的cookie文件。curl可以自行判断该文件是基于何种形式进行存储的。在上面的命令中,curl将会解析头部并存储从www.example.com收到的cookiescurl会根据指定的文件位置,向服务器发送经过存储的,并与其请求匹配的cookies。文件empty.txt很有可能并不存在。

读写一个netscape cookie文件,你可以同时对同一个文件使用参数-b-c

curl -b cookies.txt -c cookies.txt www.example.com

十四、处理进度

处理进度将会显示给用户在实现操作中发生了什么事情。其输出的各字段如下:

% Total    % Received % Xferd  Average Speed               Time            Curr.
                               Dload   Upload    Total    Current  Left    Speed
0  151M    0 38608    0     0   9406      0      4:41:43  0:00:04  4:41:39  9287

从左至右各字段为:

字段

含义

%

整体传输完成百分比

Total

整体传输的大小

%

下载完成百分比

Received

当前已下载的字节数

%

上传完成百分比

Xferd

当前已上传的字节数

Average Speed Dload

平均下载速度

Average Speed Upload

平均上传速度

Time Total

预计完成全部传输所需的时间

Time Current

当前所消耗的时间

Time Left

预计完成剩余传输所需的时间

Curr.Speed

最近5秒内平均传输速度(传输最开始5秒,该值是基于线路理论上的速度来计算的)

使用参数-# 将会显示一个完全不同的进度条,这里就不做过多的解释了。

十五、限速

curl允许用户设置传输速度条件以保证网络传输持续进行。通过使用-y-Y这二个开关,你可以让curl在特定时间周期内,如果传输速度在设置的最低值以下,则忽略数据传输。

如果想让curl在最近一分钟内,传输速度低于3000字节/秒的情况下,忽略数据下载,应执行如下命令:

curl -Y 3000 -y 60 www.far-away-site.com

使用下面的例子通过很好的将时间条件进行组合,来将上一条命令实现为整个操作必须在30分钟内处理完成:

curl -m 1800 -Y 3000 -y 60 www.far-away-site.com

强制curl在传输数据时不要超过一个给定的速率也是可以实现的,此操作尤其是在你不想让curl的数据传输占据你全部的网络带宽的情况下是非常有用的,使用起来就好像是一个带宽的调节器一样。

curl的数据传输速度限制为10K/s应执行:

curl --limit-rate 10K www.far-away-site.com

或者:

curl --limit-rate 10240 www.far-away-site.com

curl的数据上传速度限制为1Mb/s应执行:

curl -T upload --limit-rate 1M ftp://uploadshereplease.com

当使用参数--limit-reate时,传输速度通常是以秒为单位,会导致整体的传输速度低于给定的数值。有个别时候,如果你的网络传输出现延迟的情况下,传输的速度会非常的慢。

十六、配置文件

curl会在程序启动时会自动尝试读取用户家目录中的.curlrc文件,如果在win32系统下配置文件名为_curlrc

配置文件可以使用普通的命令行开关组成,但是你也可以指定长选项来代替破折号来增加配置文件的可读性。你可以使用空格=或者:来分隔参数及其值。配置文件中也可以使用注释。通过将每一行首字符设置成#,来完成单行的注释。

如果你希望参数中包含空格的话,你可以使用双引号"将整个参数括起来。如果在双引呈里如果还要输入一个双引号,可以使用\"的形式。

注意:你配置在一行之内完成参数的赋值。

例如:在配置文件中设置默认的连接超时和代理

# We want a 30 minute timeout:
        -m 1800
# ... and we use a proxy for all accesses:
        proxy = proxy.our.domain.com:8080

白空格符号ARE会出现在每一行的未必,但是所有以白空格做为首字符的行,都将被忽略。

通过将参数-q放到curl命令行的第一个参数的位置,可以阻止curl读取默认的配置文件:

curl -q www.thatsite.com

在没有可以使用的URL的情况下,如果想让curl获取和显示本地帮助页面,就应该按如下方式设定配置文件:

# default url to get
        url = "http://help.with.curl.com/curlhelp.html"

你也可以给用参数-k或者--config来给curl指定其他的配置文件。如果你将配置文件的文件名设置为”-“, 那么curl就会从标准输入里读取配置文件,这样你就可以手工处理一些需要隐藏的选项了:

echo "user = user:passwd" | curl -K - http://that.secret.site.com

十七、附加头部(EXTRA HEADERS)

当你在自己特殊的程序中使用curl时, 你可以需要在获取web页面时在最后加入自定义的头部信息。你可以使用参数-H来完成这一操作。

例如,当获取一个页面的时候将头部信息 “X-you-and-me: yes”发送到服务器:

curl -H "X-you-and-me: yes" www.love.com

这在你想将不同的文本做为html头部发送给服务器的情况下十分有用。curl将使用-H指定的html头部将代替默认的html头部来进行发送。如果你将头部信息中的相关值赋成空值,那个你将阻止该项头部信息的发送。如阻止发送主机名(Host):

curl -H "Host:" www.server.com