一、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地址或者其他地址(反正只要能提供服务的)

欢迎来到Curl的世界的更多相关文章

  1. Swift中文教程(一)--欢迎来到Swift的世界

    原文:Swift中文教程(一)--欢迎来到Swift的世界 Apple凌晨时在WWDC发布了Swift编程语言,语法简介我很喜欢,市面上没有完整的中文教程,我在ibooks里面下载了英文原版,现在开始 ...

  2. 精通libGDX游戏开发-RPG实战-欢迎来到RPG的世界

    欢迎来到RPG的世界 本章我会快速的使用tiled这样的瓷砖地图工具,来带领大家创造所设想的世界. 创建并编辑瓷砖地图 瓷砖地图(tile-based map)是广泛应用于各种游戏类型的地图格式,li ...

  3. 欢迎来到 Flask 的世界

    欢迎来到 Flask 的世界 欢迎阅读 Flask 的文档.本文档分成几个部分,我推荐您先读 < 安装 >,然后读< 快速上手 >.< 教程 > 比快速上手文档更详 ...

  4. Nacos系列:欢迎来到Nacos的世界!

    什么是Nacos? Nacos 是构建以"服务"为中心的现代应用架构 (例如微服务范式.云原生范式) 的服务基础设施. Nacos可以做什么? 1.动态配置服务:支持以中心化.外部 ...

  5. 欢迎来到Flask的世界

    不多说,直接上文档链接:Flask的文档 教程 API 快速上手

  6. 欢迎来到 ZooKeeper 动物世界

    本文作者:HelloGitHub-老荀 Hi,这里是 HelloGitHub 推出的 HelloZooKeeper 系列,免费有趣.入门级的 ZooKeeper 开源教程,面向有编程基础的新手. Zo ...

  7. Contest 20140923 潛行世界 拓撲排序,期望

    潜行世界 查看 提交 统计 提问 总时间限制:  10000ms 内存限制:  256000kB 描述 HJA和学弟还在旅游中,这次他们来到了潜行世界.潜行世界是一个N个点M条边的有向无环图.每条路对 ...

  8. 欢迎来到Swift天地(Welcome to Swift)

    期待已久的WWDC真的是不管是什么硬件更新,没有太多的开发者,本次会议是还是很有亮点.水果给我们带来了一种新的语言Swift.种无比简洁高效的语言,并且新的 Swift 语言依然会和 C 与 Obje ...

  9. ESP32 开发之旅① 走进ESP32的世界 安装开发环境

    1.前言     欢迎大家来到ESP32的世界,从现在开始,笔者将带领大家慢慢揭开ESP32神秘的面纱.     在学习ESP32之前,博主希望读者能有ESP8266的学习基础(ESP32 Wifi模 ...

随机推荐

  1. [日常] Go语言圣经--浮点数习题

    练习 3.1: 如果f函数返回的是无限制的float64值,那么SVG文件可能输出无效的多边形元素(虽然许多SVG渲染器会妥善处理这类问题).修改程序跳过无效的多边形. 练习 3.2: 试验math包 ...

  2. java - 线程等待与唤醒

    Java多线程系列--“基础篇”05之 线程等待与唤醒 概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. w ...

  3. 四种简单的sql语句(增删改查语句)

    四种简单的sql语句(增删改查语句) 一.插入语句 insert into [table] ([column],[column],[column]) values(?,?,?) 二.删除语句 dele ...

  4. webhttpbinding、basichttpbinding和wshttpbinding的区别

    webhttpbinding是REST风格的绑定,您只需点击一个URL,然后从Web服务中获取大量XML或JSON. basichttpbinding和wshttpbinding是两个基于SOAP的绑 ...

  5. form表单提交注意事项

    1.在一个form表单中,若只有一个input(不管type是什么),按回车键表单会自动提交,但是当表单中存在多个input时,按回车键不会执行任何操作,这是form表单的一个特性. 2.在一个表单中 ...

  6. for循环中嵌套setTimeout,执行顺序和结果该如何理解?

    这两天在捣鼓作用域的问题,有的时候知识这个东西真的有点像是牵一发而动全身的感觉.在理解作用域的时候,又看到了一道经典的面试题和例子题. 那就是在for循环中嵌套setTimeout延时,想想之前面试的 ...

  7. 2018-10-16 22:56:13 c language

    2018-10-16 22:56:13 c language 我们把上面的步骤总结一下,可以发现一个完整的编程过程是: 编写源文件:这是编程的主要工作,我们要保证代码的语法 100% 正确,不能有任何 ...

  8. Android热修复之 - 阿里开源的热补丁

    1.1 基本介绍 我们先去github上面了解它https://github.com/alibaba/AndFix 这里就有一个概念那就AndFix.apatch补丁用来修复方法,接下来我们看看到底是 ...

  9. 成为Java顶尖程序员,先过了下面问题!

    一.数据结构与算法基础 说一下几种常见的排序算法和分别的复杂度. 用Java写一个冒泡排序算法 描述一下链式存储结构. 如何遍历一棵二叉树? 倒排一个LinkedList. 用Java写一个递归遍历目 ...

  10. org.postgresql.util.PSQLException: 栏位索引超过许可范围:3,栏位数:2。

    org.postgresql.util.PSQLException: 栏位索引超过许可范围:3,栏位数:2. 今天在写完SQL进行查询的时候,后台一直报错显示上面的信息.看错误完全不知道原因,就重新检 ...