什么是代理服务器

代理服务器(Proxy Server)是网上提供转接功能的服务器,在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,是直接联系到目的站点服务器,然后由目的站点服务器把信息传送回来。代理服务器是介于客户端和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。  
  比如你想访问的目的网站是A,由于某种原因你不能访问到网站A或者你不想直接访问网站A(这样通过代理服务器网站A,对网站A而已可以隐藏你自己的身份,也就是不知道是谁访问的网站,而认为是代理服务器访问的),此时你就可以使用代理服务器,在实际访问网站的时候,你在浏览器的地址栏内和你以前一样输入你要访问的网站,浏览器会自动先访问代理服务器,然后代理服务器会自动给你转接到你的目标网站。

代理服务器的作用

提高访问速度:通常代理服务器都设置一个较大的缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度。
  隐藏真实身份:上网者也可以通过代理服务器隐藏自己的真实地址信息,还可隐藏自己的IP,防止被黑客攻击。  
  突破限制:有时候网络供应商会对上网用户的端口,目的网站,协议,游戏,即时通讯软件等的限制,使用代理服务器都可以突破这些限制。

代理服务器主要类型

HTTP代理:最简单的一种代理形式,能够代理客户机的HTTP访问,上网浏览网页使用的都是HTTP协议,通常的HTTP代理端口为80、3128或8080端口。  
  SOCKS代理:SOCKS代理与HTTP等其他类型的代理不同,它只是简单地传递数据包,而并不关心是何种应用协议,既可以是HTTP协议,也可以是FTP协议,或者其他任何协议,所以SOCKS代理服务器比其他类型的代理服务器速度要快得多。SOCKS代理又分为SOCKS4和 SOCKS5,二者不同的是SOCKS4代理只支持TCP协议(即传输控制协议),而SOCKS5代理则既支持TCP协议又支持UDP协议(即用户数据包协议),还支持各种身份验证机制、服务器端远程域名解析(解决DNS污染就靠这个了)等。SOCK4能做到的SOCKS5都可得到,但SOCKS5能够做到的SOCKS则不一定能做到。目前SOCKS5是最常用的一种SOCKS代理。

如何使用HTTP代理服务器

HTTP代理服务器的设置方法,对于IE和Firefox设置略有不同。设置前需要先找一些可用的免费代理服务器地址。  

  IE的设置是这样的,打开IE浏览器,选择菜单栏的“工具/Internet选项…”。  

  这时候分两种情况,对于ADSL拨号用户来说,选择一个网络连接后,点“设置”,如下图所示,选中代理服务器,填入地址和端口号。

Python创建代理服务器 python 代理服务器_HTTP


对于局域网用户来说,需要点“局域网设置”,如下图所示,选中代理服务器,填入地址和端口号。

Python创建代理服务器 python 代理服务器_Python创建代理服务器_02

Python中如何使用代理服务器访问网页

练习Python爬虫时,当使用一台主机多次访问某个服务器时,服务器可能会认为主机属于恶意攻击,很可能会封了主机ip。此时的解决办法可以用代理服务器。

主机可以发送不同的请求给不同的代理服务器,代理服务器再去向目标服务器请求。这样就可以解决ip限制的问题。

Python创建代理服务器 python 代理服务器_代理服务器_03


使用代理访问网页有四个步骤

1.设置代理地址

proxy = {"http":"80.211.168.221:8080"} 2.创建ProxyHandler

proxy_handler = request.ProxyHandler(proxy)

3.创建Opener

opener = request.build_opener(proxy_handler)

4.安装Opener

request.install_opener(opener)

之后就是urlopen访问网页

from urllib import request
# 也可以from urllib.request as request
def use_porxy(url,porxy_addr): 
  porxy = request.ProxyHandler({'http':porxy_addr})
  opener = request.build_opener(porxy)
  request.install_opener(opener)   
  try:
      response = request.urlopen(url, timeout=5)
  except Exception as e:
      print('交接错误,退出程序')
      exit()
  data = response.read().decode('utf-8')    
  return data
  
data = use_porxy("http://www.baidu.com", "114.115.182.59:128")
print(len(data)