
qq:800819103
在线客服,实时响应
qq群
在线客服,实时响应
客服电话
13318873961http代理是如何爬取数据的? Web 代理是一种存在于网络中间的实体,提供各式各样的功能。现代网络系统中,Web 代理无处不在。我之前有关 HTTP 的博文中,多次提到了代理对 HTTP 请求及响应的影响。今天这篇文章,我打算谈谈 HTTP 代理本身的一些原理,以及如何用 Node.js 快速实现代理。
HTTP 代理存在两种形式,分别简单介绍如下:
第一种是 RFC 7230 - HTTP/1.1: Message Syntax and Routing(即修订后的 RFC 2616,HTTP/1.1 协议的第一部分)描述的普通代理。这种代理扮演的是「中间人」角色,对于连接到它的客户端来说,它是服务端;对于要连接的服务端来说,它是客户端。它就负责在两端之间来回传送 HTTP 报文。
第二种是 Tunneling TCP based protocols through Web proxy servers(通过 Web 代理服务器用隧道方式传输基于 TCP 的协议)描述的隧道代理。它通过 HTTP 协议正文部分(Body)完成通讯,以 HTTP 的方式实现任意基于 TCP 的应用层协议代理。这种代理使用 HTTP 的 CONNECT 方法建立连接,但 CONNECT 最开始并不是 RFC 2616 - HTTP/1.1 的一部分,直到 2014 年发布的 HTTP/1.1 修订版中,才增加了对 CONNECT 及隧道代理的描述,详见 RFC 7231 - HTTP/1.1: Semantics and Content。实际上这种代理早就被广泛实现。
普通代理
第一种 Web 代理原理特别简单:
HTTP 客户端向代理发送请求报文,代理服务器需要正确地处理请求和连接(例如正确处理 Connection: keep-alive),同时向服务器发送请求,并将收到的响应转发给客户端。
下面这张图片来自于《HTTP 权威指南》,直观地展示了上述行为:
假如我通过代理访问 A 网站,对于 A 来说,它会把代理当做客户端,完全察觉不到真正客户端的存在,这实现了隐藏客户端 IP 的目的。当然代理也可以修改 HTTP 请求头部,通过 X-Forwarded-IP 这样的自定义头部告诉服务端真正的客户端 IP。但服务器无法验证这个自定义头部真的是由代理添加,还是客户端修改了请求头,所以从 HTTP 头部字段获取 IP 时,需要格外小心。这部分内容可以参考我之前的《HTTP 请求头中的 X-Forwarded-For》这篇文章。
给浏览器显式的指定代理,需要手动修改浏览器或操作系统相关设置,或者指定 PAC(Proxy Auto-Configuration,自动配置代理)文件自动设置,还有些浏览器支持 WPAD(Web Proxy Autodiscovery Protocol,Web 代理自动发现协议)。显式指定浏览器代理这种方式一般称之为正向代理,浏览器启用正向代理后,会对 HTTP 请求报文做一些修改,来规避老旧代理服务器的一些问题,这部分内容可以参考我之前的《Http 请求头中的 Proxy-Connection》这篇文章。
还有一种情况是访问 A 网站时,实际上访问的是代理,代理收到请求报文后,再向真正提供服务的服务器发起请求,并将响应转发给浏览器。这种情况一般被称之为反向代理,它可以用来隐藏服务器 IP 及端口。一般使用反向代理后,需要通过修改 DNS 让域名解析到代理服务器 IP,这时浏览器无法察觉到真正服务器的存在,当然也就不需要修改配置了。反向代理是 Web 系统最为常见的一种部署方式,例如本博客就是使用 Nginx 的 proxy_pass 功能将浏览器请求转发到背后的 Node.js 服务。
隧道代理
第二种 Web 代理的原理也很简单:
HTTP 客户端通过 CONNECT 方法请求隧道代理创建一条到达任意目的服务器和端口的 TCP 连接,并对客户端和服务器之间的后继数据进行盲转发。
下面这张图片同样来自于《HTTP 权威指南》,直观地展示了上述行为:
假如我通过代理访问 A 网站,浏览器首先通过 CONNECT 请求,让代理创建一条到 A 网站的 TCP 连接;一旦 TCP 连接建好,代理无脑转发后续流量即可。所以这种代理,理论上适用于任意基于 TCP 的应用层协议,HTTPS 网站使用的 TLS 协议当然也可以。这也是这种代理为什么被称为隧道的原因。(部分转载)
相关文章内容简介
1 http代理是如何爬取数据的?
http代理是如何爬取数据的?∵Web∵代理是一种存在于网络中间的实体,提供各式各样的功能。现代网络系统中,Web∵代理无处不在。我之前有关∵HTTP∵的博文中,多次提到了代理对∵HTTP∵请求及响应的影响。今天这篇文章,我打算谈谈∵HTTP∵代理本身的一些原理,以及如何用∵Node.js∵快速实现代理。 HTTP∵代理存在两种形式,分别简单介绍如下: ... [阅读全文]
最新标签
推荐阅读
10
2018-12
数据来源于哪里?爬虫怎么采集数据?
很多企业的决策往往是根据数据决定的,那么这些数据来源于哪里?大家都知道爬虫可以大量的采集数据,那么爬虫怎么采集数据,如果获得大量的数据呢?这些数据都是公开的吗?
01
2019-03
IP可以随意修改吗?修改网络ip地址软件
我们上网是一定要IP地址的,但是有些时候IP会冲突上不了网,这时候就需要修改IP地址,这IP可以随意修改吗?如何更改IP地址呢?
15
2019-01
设置局域网代理上网的方法
由于IP资源的稀缺,很多办公区使用的都是局域网上网,还进行了各种的上网限制,这能不能突破局域网的限制呢?如果仅是限制了某些网站不能访问,企业通常是使用了IP限制,可以使用代理
08
2019-07
数据采集可以用代理IP吗?
说起代理IP,经常做网络业务的人都知道,可以用来注册、抢购、投票、发帖,这些其实都是属于效果补量,代理IP除了可以做效果补量使用,数据采集也可以使用。其实代理IP的功能用途远比你
热门文章