curl详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了curl详解相关的知识,希望对你有一定的参考价值。
curl:命令行下的网站访问和验证工具
常用参数如下:
-c,–cookie-jar:将cookie写入到文件 -b,–cookie:从文件中读取cookie -C,–continue-at:断点续传 -d,–data:http post方式传送数据 -D,–dump-header:把header信息写入到文件 -F,–from:模拟http表达提交数据 -s,–slient:减少输出信息 -o,–output:将信息输出到文件 -O,–remote-name:按照服务器上的文件名,存在本地 –l,–head:仅返回头部信息 -u,–user[user:pass]:设置http认证用户和密码 -T,–upload-file:上传文件 -e,–referer:指定引用地址 -x,–proxy:指定代理服务器地址和端口 -w,–write-out:输出指定格式内容 –retry:重试次数 –connect-timeout:指定尝试连接的最大时间/s
实例:
抓取页面到指定文件,如果有乱码可以使用iconv转码
# curl -o baidu.html www.baidu.com # curl -s -o baidu.html www.baidu.com |iconv -f utf-8 #减少输出信息
模拟浏览器头(user-agent)
# curl -A “Mozilla/52.0 (compatible;MSIE 8.0; Windows NT 6.0)” www.baidu.com
处理重定向页面
# curl –L http://172.16.1.10/301.<a href="http://www.ttlsa.com/php/" title="php"target="_blank">php</a> #默认curl是不处理重定向
模拟用户登陆,保存cookie信息到cookies.txt文件,再使用cookie登陆
# curl -c ./cookies.txt -F NAME=user -F PWD=***URL #NAME和PWD是表单属性不同,每个网站基本都不同 # curl -b ./cookies.txt –o URL
获取HTTP响应头headers
# curl -I http://www.baidu.com # curl -D ./header.txt http://www.baidu.com #将headers保存到文件中
访问HTTP认证页面
# curl -u user:pass URL
通过ftp上传和下载文件
# curl -T filename ftp://user:[email protected]/docs #上传 # curl -O ftp://user:[email protected]/filename #下载
curl url | 查看url的源代码 |
curl -I url | 查看url的状态码 |
200 | Ok |
301 302 | 跳转 |
404 403 502 503 | |
curl -X ip:port url -I | 通过代理访问url查看状态 |
curl -Iv url | 查看详细的访问过程 |
curl -u username:password url | 访问需要用户密码的网站 |
curl -o 名字 url | 将文件保存为命令行中指定的文件名的文件中 |
curl -O url | 使用URL中默认的文件名保存文件到本地 |
curl -A ‘aaa‘ www.aaa.com | curl在请求一个网页的时候,可以指定user_agent |
curl -I www.aaa.com | 只显示header信息,而不显示网页返回给我们的内容 |
下载单个文件,默认将输出打印到标准输出中(STDOUT)中
通过-o/-O选项保存下载的文件到指定的文件中:
-o:将文件保存为命令行中指定的文件名的文件中
-O:使用URL中默认的文件名保存文件到本地
1 # 将文件下载到本地并命名为mygettext.html
curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
2 # 将文件保存到本地并命名为gettext.html
curl -O http://www.gnu.org/software/gettext/manual/gettext.html
3# 指定代理主机和端口
curl -x proxysever.test.com:3128 http://google.com
同样可以使用转向字符">"对输出进行转向输出
同时获取多个文件
1 curl -O URL1 -O URL2
若同时从同一站点下载多个文件时,curl会尝试重用链接(connection)。
通过-L选项进行重定向
默认情况下CURL不会发送HTTP Location headers(重定向).当一个被请求页面移动到另一个站点时,会发送一个HTTP Loaction header作为请求,然后将请求重定向到新的地址上。
保存与使用网站cookie信息
1 # 将网站的cookies信息保存到sugarcookies文件中
curl -D sugarcookies http://localhost/sugarcrm/index.php
curl -b sugarcookies http://localhost/sugarcrm/index.php
传递请求数据
默认curl使用GET方式请求数据,这种方式下直接通过URL传递数据
可以通过--data/-d 方式指定使用POST方式传递数据
1 # GET curl -u username https://api.github.com/user?access_token=XXXXXXXXXX
# POST curl -u username --data "param1=value1¶m2=value" https://api.github.com
# 也可以指定一个文件,将该文件中的内容当作数据传递给服务器端
curl --data @filename https://github.api.com/authorizations
注:默认情况下,通过POST方式传递过去的数据中若有特殊字符,首先需要将特殊字符转义在传递给服务器端,如value值中包含有空格,则需要先将空格转换成%20,如:
curl -d "value%201" http://hostname.com
在新版本的CURL中,提供了新的选项 --data-urlencode,通过该选项提供的参数会自动转义特殊字符。
curl --data-urlencode "value 1" http://hostname.com
除了使用GET和POST协议外,还可以通过 -X 选项指定其它协议,如:
curl -I -X DELETE https://api.github.cim
上传文件
curl --form "[email protected]" http://hostname/resource
本文出自 “实践出真知” 博客,请务必保留此出处http://m51cto.blog.51cto.com/53087/1959179
以上是关于curl详解的主要内容,如果未能解决你的问题,请参考以下文章
CentOS yum 命令出现 [Errno 14] curl#6 - "Couldn't resolve host ..." 的解决方法(代码片段