curl命令详解

作者:周星 发布:2017-10-07

       4月30号那天给UED提供ajax接口,因为本地不好测试接口,再加上开发时有点急,配合UED测试时反复出错,不是少写了个什么,就是逻辑有点小问题,浪费了时间不说,更重要的是:丢了咱开发的面子,正当这个时候,咱灵机一动想起了curl,一下搞定,及时的挽回了面子,这两天详细的过了一遍curl这个神器,下面请看我整理的用法。

简介

       curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。它是一款开源软件,可以兼容各种操作系统,并支持多种协议,下面举例讲解如何使用。

1. 查看网页源码

       直接在curl命令后接网站URL,就可以在Terminal上看到网页源码,我们选择一个网页源码较少的网址,比如starzhou.com/404.html(随着网站作者开发,你可能得到不一样的结果)

curl www.xingishere.com/404.html

会得到如下输出:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>页面找不到了</title>
  <style type="text/css">
    body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
    div.dialog {
      width: 25em;
      padding: 0 4em;
      margin: 4em auto 0 auto;
      border: 1px solid #ccc;
      border-right-color: #999;
      border-bottom-color: #999;
    }
    h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
  </style>
</head>

<body>
  <!-- This file lives in public/404.html -->
  <div class="dialog">
    <h1>页面找不到了</h1>
    <h1>The page you were looking for doesn't exist.</h1>
    <p>You may have mistyped the address or the page may have moved.</p>
  </div>
</body>
</html>

如果想把这个页面保存下来,直接使用-o参数,作用类似于wget

curl -o 文件名 地址

curl -o test.html www.xingishere.com/404.html

得到如下显示:

➜  ~  curl -o test.html www.xingishere.com/404.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   801  100   801    0     0    606      0  0:00:01  0:00:01 --:--:--   606

你还可以使用-x参数来指定端口和代理,默认端口为1080

curl -x 代理:端口号

2. 自动跳转

很多网站实现了自动跳转的功能,只要使用 -L参数,就能实现自动跳转

curl -L starzhou.com/blogs

它就可以自动帮我们跳转到starzhou.com/blogs

4. 显示网站头信息

使用-i参数即可显示HTTP RESPONSE的头信息,连同html代码一起返回。如果参数为大写 I ,则只返回 HTTP 头信息。

curl -i starzhou.com/404.html

结果如下

HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Fri, 02 May 2014 13:35:38 GMT
Content-Type: text/html
Content-Length: 801
Connection: keep-alive
Status: 200 OK
Last-Modified: Mon, 31 Mar 2014 09:41:18 GMT
X-Content-Digest: 8fea4e0097e17a3522307792fe585866d794df55
Age: 0
X-Rack-Cache: miss, store

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <title>页面找不到了</title>
  <style type="text/css">
.......

4. 通信过程

-v参数可以显示一次http通信的整个过程,包括端口连接、http request头信息和HTML源码。

curl -v www.xingishere.com/404.html

结果如下:

➜  ~  curl -v xingishere.com/404.html
* Adding handle: conn: 0x7fdeb3804000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7fdeb3804000) send_pipe: 1, recv_pipe: 0
* About to connect() to xingishere.com port 80 (#0)
*   Trying 107.170.209.170...
* Connected to xingishere.com (107.170.209.170) port 80 (#0)
> GET /404.html HTTP/1.1
> User-Agent: curl/7.30.0
> Host: xingishere.com
> Accept: */*
>
< HTTP/1.1 200 OK
* Server nginx/1.1.19 is not blacklisted
< Server: nginx/1.1.19
< Date: Fri, 02 May 2014 13:40:53 GMT
< Content-Type: text/html
< Content-Length: 801
< Connection: keep-alive
< Status: 200 OK
< Last-Modified: Mon, 31 Mar 2014 09:41:18 GMT
< X-Content-Digest: 8fea4e0097e17a3522307792fe585866d794df55
< Age: 0
< X-Rack-Cache: stale, valid, store
<
<!DOCTYPE html>
<html>
<head>
........

使用--trace参数可以把更详细的结果保存在指定的文件中,用法是

curl --trace test.txt www.xingishere.com
curl --trace-ascii test.txt www.xingishere.com

打开test.txt即可查看详细结果。

5. 发送表单信息

       发送表单信息应该是使用频率最高,也是最实用的功能了,有些黑客甚至可以使用这个命令来达到一些其它目的。发送表单的方式有两种,GET和POST,GET参数直接附在URL后面,所以我们可以直接发送。

curl starzhou.com/blogs?keyword=星

注:zsh下需要在url两边加单引号

如果发送的表单为POST,则需要使用-d参数

curl -d "name=xxx&password=xxx" www.test.html

       本次调试接口就是使用的 -d 命令,本地向接口 post 数据,直接在rails控制台看结果,接口调通的那一刻还是很激动的。

使用--data-urlencode参数,curl可以为你的表单编码。

curl --data-urlencode "name=xxx&password=xxx" www.test.html

6. HTTP动词

使用-X参数,curl就可以支持其它HTTP动词,比如 Rails 中的 delete

curl -X DELETE www.test.com

7. 文件上传

       使用-F参数可实现文件上传,curl 就会以multipart/form-data的方式发送 POST 请求,此命令不做过多解释,如果看不懂可先了解一下上传基本原理。

curl -F "action=upload" -F "filename=@file.tar.gz" www.test.html

还有

curl -F upload=@localfilename -F press=OK URL

关于POST还有不少用法,请自行探索。

8. 模拟referrer 和 user-agent

有时为了干掉网站的防盗链,需要模拟referer,这时就要使用-e或者 --referer 命令

curl -e "www.a.html" "www.b.html"

模拟user-agent则使用--user-agent参数

curl --user-agent '想仿造的user-agent' www.test.html

       可能很多后端开发者不知道这refereruser-agent是干嘛用的,这里简单说一下,referer是跳转来源,user-agent是访问者的设备,包括系统、CPU、浏览器版本等等,如想详细了解,请自行google。

9. cookie

-b参数可以保存网站的cookie,而-c参数则用来发送cookie

curl -b file_name www.cookiesite. com

curl -b cookies.txt -c newcookies.txt www.cookiesite.com

10.加密HTTP和HTTPS

curl 可以直接访问https的网站

如果是采用证书认证的http地址,证书在本地,那么curl这样使用:

curl -E mycert.pem https://that.secure.server. com

支付宝扫码赞助博主


评论(0)