世界上最伟大的投资就是投资自己的教育

全场限时 5 折

首页Ruby
随风 · 练气

curl 的使用

随风发布于2667 次阅读

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/

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

相关资料:

完结。

本站文章均为原创内容,如需转载请注明出处,谢谢。

0 条回复
暂无回复~~
喜欢
统计信息
    学员: 29063
    视频数量: 1973
    文章数量: 489

© 汕尾市求知科技有限公司 | Rails365 Gitlab | Qiuzhi99 Gitlab | 知乎 | b 站 | 搜索

粤公网安备 44152102000088号粤公网安备 44152102000088号 | 粤ICP备19038915号

Top