curl用法

CURL命令详解

原文地址: http://www.thegeekstuff.com/2012/04/curl-examples/


下载单个文件,默认将输出打印到标准输出中(STDOUT)中

curl http://www.centos.org

通过-o/-O选项保存下载的文件到指定的文件中:
-o:将文件保存为命令行中指定的文件名的文件中
-O:使用URL中默认的文件名保存文件到本地

1 # 将文件下载到本地并命名为mygettext.html
2 curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
3 
4 # 将文件保存到本地并命名为gettext.html
5 curl -O http://www.gnu.org/software/gettext/manual/gettext.html

同样可以使用转向字符">"对输出进行转向输出

同时获取多个文件

1 curl -O URL1 -O URL2

若同时从同一站点下载多个文件时,curl会尝试重用链接(connection)。

通过-L选项进行重定向
默认情况下CURL不会发送HTTP Location headers(重定向).当一个被请求页面移动到另一个站点时,会发送一个HTTP Loaction header作为请求,然后将请求重定向到新的地址上。
例如:访问google.com时,会自动将地址重定向到google.com.hk上。

复制代码
 1 curl http://www.google.com
 2 <HTML>
 3 <HEAD>
 4     <meta http-equiv="content-type" content="text/html;charset=utf-8">
 5     <TITLE>302 Moved</TITLE>
 6 </HEAD>
 7 <BODY>
 8     <H1>302 Moved</H1>
 9     The document has moved
10     <A HREF="http://www.google.com.hk/url?sa=p&amp;hl=zh-CN&amp;pref=hkredirect&amp;pval=yes&amp;q=http://www.google.com.hk/&amp;ust=1379402837567135amp;usg=AFQjCNF3o7umf3jyJpNDPuF7KTibavE4aA">here</A>.
11 </BODY>
12 </HTML>
复制代码

上述输出说明所请求的档案被转移到了http://www.google.com.hk。

这是可以通过使用-L选项进行强制重定向

1 # 让curl使用地址重定向,此时会查询google.com.hk站点
2 curl -L http://www.google.com

断点续传

通过使用-C选项可对大文件使用断点续传功能,如:

复制代码
1 # 当文件在下载完成之前结束该进程
2 $ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
3 ##############             20.1%
4 
5 # 通过添加-C选项继续对该文件进行下载,已经下载过的文件不会被重新下载
6 curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html
7 ###############            21.1%
复制代码

对CURL使用网络限速
通过--limit-rate选项对CURL的最大网络使用进行限制

1 # 下载速度最大不会超过1000B/second
2 
3 curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

下载指定时间内修改过的文件

当下载一个文件时,可对该文件的最后修改日期进行判断,如果该文件在指定日期内修改过,就进行下载,否则不下载。
该功能可通过使用-z选项来实现:

1 # 若yy.html文件在2011/12/21之后有过更新才会进行下载
2 curl -z 21-Dec-11 http://www.example.com/yy.html

CURL授权

在访问需要授权的页面时,可通过-u选项提供用户名和密码进行授权

1 curl -u username:password URL
2 
3 # 通常的做法是在命令行只输入用户名,之后会提示输入密码,这样可以保证在查看历史记录时不会将密码泄露
4 curl -u username URL

从FTP服务器下载文件

CURL同样支持FTP下载,若在url中指定的是某个文件路径而非具体的某个要下载的文件名,CURL则会列出该目录下的所有文件名而并非下载该目录下的所有文件

1 # 列出public_html下的所有文件夹和文件
2 curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
3 
4 # 下载xss.php文件
5 curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

上传文件到FTP服务器

通过 -T 选项可将指定的本地文件上传到FTP服务器上

复制代码
# 将myfile.txt文件上传到服务器
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com

# 同时上传多个文件
curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com

# 从标准输入获取内容保存到服务器指定的文件中
curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
复制代码

获取更多信息

通过使用 -v 和 -trace获取更多的链接信息

通过字典查询单词

复制代码
1 # 查询bash单词的含义
2 curl dict://dict.org/d:bash
3 
4 # 列出所有可用词典
5 curl dict://dict.org/show:db
6 
7 # 在foldoc词典中查询bash单词的含义
8 curl dict://dict.org/d:bash:foldoc
复制代码

为CURL设置代理

-x 选项可以为CURL添加代理功能

1 # 指定代理主机和端口
2 curl -x proxysever.test.com:3128 http://google.co.in

 

其他网站整理

保存与使用网站cookie信息

1 # 将网站的cookies信息保存到sugarcookies文件中
2 curl -D sugarcookies http://localhost/sugarcrm/index.php
3 
4 # 使用上次保存的cookie信息
5 curl -b sugarcookies http://localhost/sugarcrm/index.php

传递请求数据

默认curl使用GET方式请求数据,这种方式下直接通过URL传递数据
可以通过 --data/-d 方式指定使用POST方式传递数据

复制代码
1 # GET
2 curl -u username https://api.github.com/user?access_token=XXXXXXXXXX
3 
4 # POST
5 curl -u username --data "param1=value1&param2=value" https://api.github.com
6 
$ curl -i -X POST -H "'Content-type':'application/x-www-form-urlencoded', 'charset':'utf-8', 'Accept': 'text/plain'" -d 'json_data={"a":"aaa","b":"bbb","data":[{"c":"ccc","d":"ddd","keywords":[{"e": "eee", "f":"fff", "g":"ggg"}]}]}' url
7 # 也可以指定一个文件,将该文件中的内容当作数据传递给服务器端
8 curl --data @filename https://github.api.com/authorizations
复制代码

注:默认情况下,通过POST方式传递过去的数据中若有特殊字符,首先需要将特殊字符转义在传递给服务器端,如value值中包含有空格,则需要先将空格转换成%20,如:

1 curl -d "value%201" http://hostname.com

在新版本的CURL中,提供了新的选项 --data-urlencode,通过该选项提供的参数会自动转义特殊字符。

1 curl --data-urlencode "value 1" http://hostname.com

除了使用GET和POST协议外,还可以通过 -X 选项指定其它协议,如:

1 curl -I -X DELETE https://api.github.cim

上传文件

1 curl --form "fileupload=@filename.txt" http://hostname/resource
### curl 使用方法、教程与示例 #### 什么是 curl? `curl` 是一个强大的命令行工具,支持多种协议(HTTP/HTTPS、FTP 等),能够用于发送和接收网络数据包。它不仅适用于文件下载,还可以作为开发中的调试工具来模拟 HTTP 请求[^2]。 --- #### 安装验证 在 Windows 上完成 `curl` 的安装后,可以通过以下方式验证其是否正常工作: ```bash curl --version ``` 如果返回版本号及相关信息,则说明安装成功[^3]。 --- #### 基本使用 以下是几个常见的 `curl` 使用场景: 1. **GET 请求** 发送简单的 GET 请求获取网页内容: ```bash curl https://www.example.com ``` 2. **带自定义头部的请求** 添加特定的 HTTP 头部字段,例如设置 Content-Type 和 Authorization: ```bash curl -H 'Content-Type: application/json' \ -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \ https://api.example.com/resource ``` 此处 `-H` 参数用来指定额外的头信息[^4]。 3. **POST 请求** 向服务器提交 JSON 数据时可采用如下形式: ```bash curl -X POST "https://example.com/api/v1/create" \ -d '{"key":"value"}' ``` 这里 `-X POST` 明确指定了请求类型为 POST,而 `-d` 表示附加的数据体。 4. **携带认证令牌访问资源** 对受保护接口发起调用需附带身份凭证: ```bash curl -H 'Authorization: Bearer JWT_TOKEN_HERE' \ https://secure-api.example.org/profiles/me ``` 5. **静默模式运行** 若要屏蔽进度条和其他冗余输出,可以加入选项 `-sS` 来实现安静执行但仍保留错误提示: ```bash curl -sS http://target-site.com/page.html > output.txt ``` 6. **保存响应至本地文件** 当需要把远程 URL 下载的内容存储成磁盘上的某个位置时可用此法: ```bash curl -O https://remote-server/file.zip ``` 或者手动命名目标路径名: ```bash curl -o custom-name.pdf https://source/document.pdf ``` 7. **批量处理多个链接** 如果有若干地址要逐一抓取的话,可通过循环结构简化操作流程: ```bash urls=("http://site-a/" "http://site-b/") for url in "${urls[@]}"; do echo Fetching $url... curl "$url" done ``` 8. **SSL 验证跳过** 在某些情况下可能遇到证书校验失败的情况,此时可以用下面的方法绕开检查(注意生产环境下应谨慎对待): ```bash curl -k https://self-signed-cert-domain/ ``` 9. **跟踪重定向链路** 默认状态下当源站点发生转移不会自动跟随新的 URI;为了确保整个过程透明化,应当启用追踪机制: ```bash curl -L http://original-url-that-redirects-to-another-one/ ``` 10. **限流控制** 控制上传或下载速率以避免占用过多带宽资源: ```bash curl --limit-rate 100K https://big-file-download-location/ ``` --- #### 实际应用场景举例 假设我们正在构建搜索引擎优化(SEO)项目,并希望通过百度提供的 API 推送新页面索引给爬虫引擎,则按照官方指导编写脚本如下所示: ```bash curl -i -H "Host: data.zz.baidu.com" \ -H "Content-Length: 83" \ -H "User-Agent: curl/7.12.1" \ -H "Content-Type: text/plain" \ --data-binary @urls.txt \ "http://data.zz.baidu.com/urls?site=yourdomain.com&token=YourTokenHere" ``` 其中 `@urls.txt` 文件包含待更新的一系列网址列表[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值