<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA["一个强大的文件下载工具curl" 主题的最后发表文章]]></title>
		<link>http://bbs.163jsp.com/posts/list/7.html</link>
		<description><![CDATA[最后发表在 "一个强大的文件下载工具curl" 主题的信息]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>一个强大的文件下载工具curl</title>
				<description><![CDATA[  curl是一个利用URL语法在命令行方式下工作的文件传输工具。本文介绍了它的简单用法。<br /> <br /> curl是一个利用URL语法在命令行方式下工作的文件传输工具。它支持很多协议：FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同样支持HTTPS认证，HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传, 上载文件断点续传, http代理服务器管道（ proxy tunneling）, 甚至它还支持IPv6, socks5代理服务器, 通过http代理服务器上传文件到FTP服务器等等，功能十分强大。Windows操作系统下的网络蚂蚁，网际快车(FlashGet)的功能它都可以做到。准确的说，curl支持文件的上传和下载，所以是一个综合传输工具，但是按照传统，用户习惯称curl为下载工具。<br /> curl是瑞典curl组织开发的，您可以访问http://curl.haxx.se/获取它的源代码和相关说明。鉴于curl在Linux上的广泛使用，IBM在AIX Linux Toolbox的光盘中包含了这个软件，并且您可以访问IBM网站http://www- 1.ibm.com/servers/aix/products/aixos/linux/altlic.html下载它。curl的最新版本是 7.10.8，IBM网站上提供的版本为7.9.3。在AIX下的安装很简单，IBM网站上下载的rpm格式的包。<br /> 在http://curl.haxx.se/docs/，您可以下载到UNIX格式的man帮助，里面有详细的curl工具的使用说明。curl的用法为：curl [options] [URL...] 其中options是下载需要的参数，大约有80多个，curl的各个功能完全是依靠这些参数完成的。具体参数的使用，用户可以参考curl的man帮助。<br /> 下面，本文就将结合具体的例子来说明怎样利用curl进行下载。<br /> 1、获得一张页面<br /> 使用命令：curl <a class="snap_shots" href="http://curl.haxx.se" target="_blank" rel="nofollow">http://curl.haxx.se</a><br /> 这是最简单的使用方法。用这个命令获得了http://curl.haxx.se指向的页面，同样，如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地。如果下载的是HTML文档，那么缺省的将不显示文件头部，即HTML文档的header。要全部显示，请加参数 -i，要只显示头部，用参数 -I。任何时候，可以使用 -v 命令看curl是怎样工作的，它向服务器发送的所有命令都会显示出来。为了断点续传，可以使用-r参数来指定传输范围。<br /> 2、表单（Form）的获取<br /> 在WEB页面设计中，form是很重要的元素。Form通常用来收集并向网站提交信息。提交信息的方法有两种，GET方法和POST方法。先讨论GET方法，例如在页面中有这样一段：<br /> &lt;form method="GET" action="junk.cgi"&gt;<br /> &lt;input type=text name="birthyear"&gt;<br /> &lt;input type=submit name=press value="OK"&gt;<br /> &lt;/form&gt;<br /> 那么浏览器上会出现一个文本框和一个标为“OK”的按钮。按下这个按钮，表单就用GET方法向服务器提交文本框的数据。例如原始页面是在 www.hotmail.com/when/birth.html看到的，然后您在文本框中输入1905，然后按OK按钮，那么浏览器的URL现在应该是：“www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK”<br /> 对于这种网页，curl可以直接处理，例如想获取上面的网页，只要输入：<br /> curl "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"<br /> 就可以了。<br /> 表单用来提交信息的第二种方法叫做POST方法，POST方法和GET方法的区别在于GET方法使用的时候，浏览器中会产生目标URL，而POST不会。类似GET，这里有一个网页：<br /> &lt;form method="POST" action="junk.cgi"&gt;<br /> &lt;input type=text name="birthyear"&gt;<br /> &lt;input type=submit name=press value="OK"&gt;<br /> &lt;/form&gt;<br /> 浏览器上也会出现一个文本框和一个标为“OK”的按钮。按下这个按钮，表单用POST方法向服务器提交数据。这时的URL是看不到的，因此需要使用特殊的方法来抓取这个页面：<br /> curl -d "birthyear=1905&press=OK" www.hotmail.com/when/junk.cgi<br /> 这个命令就可以做到。<br /> 1995年年末，RFC 1867定义了一种新的POST方法，用来上传文件。主要用于把本地文件上传到服务器。此时页面是这样写的：<br /> &lt;form method="POST" enctype='multipart/form-data' action="upload.cgi"&gt;<br /> &lt;input type=file name=upload&gt;<br /> &lt;input type=submit name=press value="OK"&gt;<br /> &lt;/form&gt;<br /> 对于这种页面，curl的用法不同：<br /> curl -F upload=@localfilename -F press=OK [URL]<br /> 这个命令的实质是将本地的文件用POST上传到服务器。有关POST还有不少用法，用户可以自己摸索。<br /> 3、使用PUT方法。<br /> HTTP协议文件上传的标准方法是使用PUT，此时curl命令使用-T参数：<br /> curl -T uploadfile www.uploadhttp.com/receive.cgi<br /> 4、有关认证。<br /> curl可以处理各种情况的认证页面，例如下载用户名/密码认证方式的页面（在IE中通常是出现一个输入用户名和密码的输入框）：<br /> curl -u name:password www.secrets.com<br /> 如果网络是通过http代理服务器出去的，而代理服务器需要用户名和密码，那么输入：<br /> curl -U proxyuser:proxypassword <a class="snap_shots" href="http://curl.haxx.se" target="_blank" rel="nofollow">http://curl.haxx.se</a><br /> 任何需要输入用户名和密码的时候，只在参数中指定用户名而空着密码，curl可以交互式的让用户输入密码。<br /> 5、引用。<br /> 有些网络资源访问的时候必须经过另外一个网络地址跳转过去，这用术语来说是：referer，引用。对于这种地址的资源，curl也可以下载：<br /> curl -e <a class="snap_shots" href="http://curl.haxx.se" target="_blank" rel="nofollow">http://curl.haxx.se</a> daniel.haxx.se<br /> 6、指定用户客户端。<br /> 有些网络资源首先需要判断用户使用的是什么浏览器，符合标准了才能够下载或者浏览。此时curl可以把自己“伪装”成任何其他浏览器：<br /> curl -A "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" [URL]<br /> 这个指令表示curl伪装成了IE5.0，用户平台是Windows 2000。（对方服务器是根据这个字串来判断客户端的类型的，所以即使使用AIX也无所谓）。使用：<br /> curl -A "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" [URL]<br /> 此时curl变成了Netscape，运行在PIII平台的Linux上了。<br /> 7、COOKIES<br /> Cookie是服务器经常使用的一种记忆客户信息的方法。如果cookie被记录在了文件中，那么使用命令：<br /> curl -b stored_cookies_in_file www.cookiesite.com<br /> curl可以根据旧的cookie写出新cookie并发送到网站：<br /> curl -b cookies.txt -c newcookies.txt www.cookiesite.com<br /> 8、加密的HTTP——HTTPS。<br /> 如果是通过OpenSSL加密的https协议传输的网页，curl可以直接访问：<br /> curl <a class="snap_shots" href="https://that.secure.server.com" target="_blank" rel="nofollow">https://that.secure.server.com</a><br /> 9、http认证。<br /> 如果是采用证书认证的http地址，证书在本地，那么curl这样使用：<br /> curl -E mycert.pem <a class="snap_shots" href="https://that.secure.server.com" target="_blank" rel="nofollow">https://that.secure.server.com</a><br /> <br /> 参考读物和注意事项：curl非常博大，用户要想使用好这个工具，除了详细学习参数之外，还需要深刻理解http的各种协议与URL的各个语法。这里推荐几个读物：<br /> RFC 2616 HTTP协议语法的定义。<br /> RFC 2396 URL语法的定义。<br /> RFC 2109 Cookie是怎样工作的。<br /> RFC 1867 HTTP如何POST，以及POST的格式。<br /> curl是免费软件，IBM公司对curl不提供技术支持。]]></description>
				<guid isPermaLink="true">http://bbs.163jsp.com/posts/preList/683/1148.html</guid>
				<link>http://bbs.163jsp.com/posts/preList/683/1148.html</link>
				<pubDate><![CDATA[Fri, 30 Nov 2007 17:48:56]]> GMT</pubDate>
				<author><![CDATA[ unix]]></author>
			</item>
	</channel>
</rss>