zoukankan      html  css  js  c++  java
  • 欢迎来到Curl的世界

    一、Curl 简介

    curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是

    综合传输工具,但按传统,习惯称curl为下载工具。作为一款强力工具,curl支持包括HTTP、

    HTTPS、ftp等众多协议,还支持POST、cookies、认证、从指定偏移处下载部分文件、用户代理字

    符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl可以祝一臂之力。

    二、常用的选项

    -I/--head

    //只显示返回的 HTTP 头部信息

    -i/--include

    //返回网页 HTTP 代码的同时也包含 HTTP 头部信息输出

    -A/--user-agent <agent string>

    //User-Agent简单来说就是客户使用的操作系统和浏览器信息

    -e/--referer <URL>

    //Referer,就是客户是从哪个页面来到当前页面的

    -H/--header <header>

    //通常使用 -H host:www.***.com 来自定义HTTP请求头部要访问此服务器上的 www.***.com 这个

    主机

    --interface <name>

    //当你的服务器上有多个 IP 或网卡时,可以使用 --interface 来指定使用哪个接口、IP 地址或者主机

    名发送 curl 请求

    curl --interface eth0:1 http://www.***.com/

    curl --interface 172.16.100.1 http://www.***.com/

    -k/--insecure

    //https方式连接的站点在建立会话时默认是会检测CA与网站的证书之间的完整性和可靠性,检查通过后会使用通过证书来

    加密传输数据,而http方式是直接明文传输数据的,所以https是安全的,http是不安全的。在直接curl https连接的站点

    时是不会获取到网页HTTP代码的。

    翻译:(SSL)此选项明确允许cURL执行“不安全”的SSL连接和传输。所有的SSL连接尝试采用捆绑默认安装的

    CA证书的安全。这使得所有的连接被认为是“不安全的”失败,除非使用-k / --insecure 。

    -L/--location

    //(HTTP / HTTPS)如果服务器报告所请求的网页已经转移到一个不同的位置(标有位置:标题和3xx响应代码),此选项

    将使curl重新请求新的地方

    三、实例

    为了节省篇幅,省略了返回的HTTP网页代码,仅以状态码来区分请求是否成功,如200为成功,301永久跳转,302临时跳转

    1. 有的程序员会禁止爬虫或者其它工具对网站进行恶意爬行,所以简单识别用户使用的浏览器和操

    作系统标识,这时候使用curl就获取不到网页的HTTP代码了,但我们可以指定User-Agent方式来绕

    过,如下:

    [root@XssCookies xss]# curl -I -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" -k https://iyuns.cc

    HTTP/1.1 200 OK

    Server: ***

    Date: Mon, 13 Feb 2017 17:43:47 GMT

    Content-Type: text/html; charset=UTF-8

    Connection: keep-alive

    Vary: Accept-Encoding

    X-Powered-By: PHP/7.0.12

    其中也用到了-k/--insecure,具体描述看上面的选项解释

    [root@XssCookies xss]# curl -I -k https://iyuns.cc

    HTTP/1.1 200 OK

    Server: ***

    Date: Mon, 13 Feb 2017 17:43:23 GMT

    Content-Type: text/html; charset=UTF-8

    Connection: keep-alive

    Vary: Accept-Encoding

    X-Powered-By: PHP/7.0.12

    2. 跟随网页跳转

    我们默认直接curl的时候返回的HTTP头部是这样子的:

    [root@XssCookies xss]# curl -I http://www.***.com/

    HTTP/1.1 302 Moved Temporarily

    Date: Mon, 13 Feb 2017 17:44:46 GMT

    Content-Type: text/html; charset=utf-8

    Connection: keep-alive

    X-Powered-By: PHP/5.6.15

    Location: ./web/index.php?

    Server: ***

    其中客户的站点设置了直接访问主域名时,自动跳转到http://www.***.com/web/index.php?这个

    页面,但curl本身默认不会自动跳转然后返回HTTP请求头和网页代码。我们可以使用-L/--location

    或者指定我们是从哪个页面跳转过来的,就可以返回跳转后的页面网页代码。

    [root@XssCookies ~]# curl -I -L http://www.***.com/

    HTTP/1.1 302 Moved Temporarily

    Date: Mon, 13 Feb 2017 18:56:25 GMT

    Content-Type: text/html; charset=utf-8

    Connection: keep-alive

    X-Powered-By: PHP/5.6.15

    Location: ./web/index.php?

    Server: ***

    HTTP/1.1 200 OK

    Date: Mon, 13 Feb 2017 18:56:25 GMT

    Content-Type: text/html; charset=utf-8

    Connection: keep-alive

    Vary: Accept-Encoding

    Vary: Accept-Encoding

    X-Powered-By: PHP/5.6.15

    Server: ***

    其中返回的第一个HTTP头部信息是未跳转前的主域名请求头,第二个是跳转后的页面返回的请求

    头,200状态码就表示成功了,也可以使用-i来显示完整的网页代码

    或者指定referer来代表我们是从主域名跳转到的http://www.***.com/web/index.php?这个页面:

    [root@XssCookies ~]# curl -I http://www.***.com/web/index.php? -e "www.***.com"

    HTTP/1.1 200 OK

    Date: Mon, 13 Feb 2017 19:31:13 GMT

    Content-Type: text/html; charset=utf-8

    Connection: keep-alive

    Vary: Accept-Encoding

    Vary: Accept-Encoding

    X-Powered-By: PHP/5.6.15

    Server: ***

    3. 如果一个站有多个A记录提供服务时(可能是CDN),可以直接指定源IP地址(各种途径找)或者CDN节点的地址来获取http页面代码

    [root@XssCookies xss]# curl -I http://*.*.*.*/web/index.php? -e "www.***.com" -H host:www.***.com

    HTTP/1.1 200 OK

    Server: ***

    Date: Mon, 13 Feb 2017 17:46:11 GMT

    Content-Type: text/html; charset=utf-8

    Connection: keep-alive

    Vary: Accept-Encoding

    X-Powered-By: PHP/5.6.15

    *.*.*.* 表示你找到的真实IP地址或者其他地址(反正只要能提供服务的)

  • 相关阅读:
    【Android
    【数据结构】之队列(C语言描述)
    【数据结构】之顺序表和链表的比较
    TCP/IP协议、HTTP协议、SOCKET通讯详解
    Socket通信原理简介
    TCP/IP及内核参数优化调优
    谈应用环境下的TIME_WAIT和CLOSE_WAIT[转]
    HTTP 499 状态码 nginx下 499错误[转]
    [转]提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
    千万级的数据量查询方案
  • 原文地址:https://www.cnblogs.com/i-honey/p/9186779.html
Copyright © 2011-2022 走看看