世界上最伟大的投资就是投资自己的教育
curl 的使用
1. 介绍
按照官方对 curl 的定义是这样的:
Curl is a tool and libcurl is a library for transferring data with URL syntax, supporting FTP, FTPS, HTTP, HTTPS, GOPHER, TFTP, SCP, SFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP, SMTP, POP3, RTSP and RTMP. libcurl offers a myriad of powerful features http://curl.haxx.se/
curl是一个工具,它能模拟网络请求,比如 http 请求。一般来说,我们要访问网站是用浏览器的,但是用 curl 这个工具也可以做到,它也能够模拟表单的请求等。我们在开发 api 运用时可能会经常用到它,让它去摸似数据请求,然后查看返回的数据是否正确。
现在有很多应用或服务,都可以使用 curl 往其发送数据,然后得到响应的数据,比如Elasticsearch
。
2. 使用
可能我们用 curl 最多的是模拟 http 请求,可以是 GET、POST、HEAD 等请求。http 是超文本协议,在请求的时候,我们可以在 curl 设置好请求头部,请求方法 (GET、POST 等)、请求的地址,然后服务器会发送响应的内容,状态码和头部,我们就可以根据响应的信息进行判断或者额外的数据处理。
2.1 最简单的使用
curl http://www.rails365.net
这样会输出整个网页的内容。使用-v
(verbose),可以输出更为详细的内容。
2.2 只输出头部信息
如果只要头部信息,可以这样。
curl -I http://www.rails365.net
输出如下:
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Thu, 03 Dec 2015 03:31:06 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 13907
Connection: keep-alive
Vary: Accept-Encoding
Status: 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
ETag: W/"f9e214b1e44391f005a034e34d478bc9"
Cache-Control: max-age=0, private, must-revalidate
Set-Cookie: _rails365_session=ckFXZ3ZYNlJkZEluZ0xnMWJTemVtYWMwWW5kK1l6Um9tVWVia3FqdEtwRW1id2I2UlQ1VXo0K3hlUjJkKzBsUkNHZVZ0SWViMmRrbWNzT2dLcFdLL0dZMkpmTHFpdkpvWW14cG1hdUZZWWpZTGRtU3l6QlU4b0ZQZUIyMG5ZRElVVUNWUmpQdnU0WjhLVnUwMFl5Z3lRPT0tLVFpYUxnQ3c3UzFjbFNXMEdUamNxcUE9PQ%3D%3D--690e33780251fb1195c342f0460016176f61591d; path=/; HttpOnly
Set-Cookie: __profilin=p%3Dt; path=/
X-Request-Id: 0ed07bf6-790b-44b8-a1d9-27708c5d0c0e
X-Runtime: 0.018240
-i 参数可以显示 http response 的头信息,连同网页代码一起。
2.3 保存结果到文件中
有时候我们需要把输出的结果保存到文件中,以便我们对结果进行数据处理。
curl -o output.txt http://www.rails365.net
自行打开 output.txt 查看其内容。
2.4 带参数请求
上面有提到过最简单的 curl 请求,我们还可以带参数。
curl http://www.rails365.net/articles?page=1
或者是
curl -X GET --data "page=2" http://www.rails365.net/articles
当参数含有特殊字符时,比如空格,百分号等,可以用下面的方法:
curl -X GET --data-urlencode "page=2" http://www.rails365.net/articles
2.5 指定请求方法
默认情况下,curl 的 http 请求是用 GET 方法的,但是我们可以换成我们要任何请求方法,比如 POST、DELETE 等。
使用 DELETE 方法删除资源。
curl -XDELETE 'http://localhost:9200/professors_development/_query?q=user=qiangu'
使用 POST 方法提交数据。
curl -XPOST "http://localhost:9200/indexname/typename/optionalUniqueId" -d "{ \"field\" : \"value\"}"
使用 HEAD 方法探测资源是否存在。
curl -i -XHEAD /website/blog/124
使用 PUT 方法提交数据。
curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}'
2.6 文件上传
类似下面的表单,可以用 curl 来上传文件。
<form method="POST" enctype='multipart/form-data' action="upload.cgi">
<input type=file name=upload>
<input type=submit name=press value="OK">
</form>
curl --form upload=@localfilename --form press=OK [URL]
2.7 Referer 字段
referer 是指明了请求来自哪里,防盗链的机制就是利用它来处理的。这个可以方便做防盗链处理时进行一些测试。
curl -I --referer http://www.example.com http://www.rails365.net
2.8 User Agent
User Agent 是浏览器或请求工具的品牌信息。这个可以方便做响应式设计时进行测试。
curl -I --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" http://www.rails365.net
2.9 自动跳转
http://rails365.net
会自动跳转到http://www.rails365.net
curl http://rails365.net
这样会显示下面的信息:
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.8.0</center>
</body>
</html>
为了让它自动跳转,可以加一个-L
参数。
curl -L http://rails365.net
2.10 设置头部信息
使用 curl 可以轻易地设置请求的头部信息。
curl -I -H "Accept-Encoding: gzip" http://www.rails365.net/assets/application-7166fb1597da14300423c6a60c281a45f24573b249eafe0fd84b5c261db1d3a5.js
curl -v localhost:3000/movies -X POST \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"movie": {"title": "Star Wars: A New Hope"}}'
2.11 http 认证
有些网站开启了 http 基本认证,使用 curl 可以处理。
curl -u user:password http://example.org/
2.12 cookie
cookie 在网站安全中是很重要的,处理好它也可以防止自己的网站被恶意攻击。
最简单的带着 cookie 访问是这样的:
curl --cookie "name=Daniel" http://www.example.com
也可以访问之后把 cookie 存到文件中。
curl http://www.rails365.net --cookie-jar cookie | grep csrf
可以用文档编辑器打开 cookie 这个文件来查看其内容。
在 rails 的应用中每个表单请求都需要验证 csrf 域的。
例如这样:
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="nHQ8kgrQv6ANteMClQENTPOXN/Z9dYKGf15cXNfKPL0yVPIRR9OX5D+MycZ7rcjg5MGcRUW3aAc7b64NjgKyBQ==" />
这个东西相当于验证码啦。每次访问都会产生不一样的 token,且放在 head 里,有表单的提交的地方都会附加这个 token。服务器得到这个 token 之后,就会验证是不是机器人的。
下面是一个摸拟注册用户的功能。
curl -v http://staging.dev-start.net/users --data "user[email]=3333332222@qq.com&user[password]=12345678&user[password_confirmation]=12345678&authenticity_token=nHQ8kgrQv6ANteMClQENTPOXN/Z9dYKGf15cXNfKPL0yVPIRR9OX5D+MycZ7rcjg5MGcRUW3aAc7b64NjgKyBQ==" --cookie cookie
相关资料:
- https://github.com/jkbrzt/httpie
- https://github.com/astaxie/bat
- https://curl.haxx.se/docs/httpscripting.html
完结。
本站文章均为原创内容,如需转载请注明出处,谢谢。
© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn
粤公网安备 44152102000088号 | 粤ICP备19038915号
Top