HTTP代理基础
创始人
2024-06-02 20:44:19

代理分两种,一种是高匿代理,还有一种是透明代理,这两个有什么区别呢?

其实,除了高匿代理和透明代理以外,还有一种中间形态叫做匿名代理。

这几种代理之间的区别在于转发请求的头部参数不同。

透明代理
目标服务器可以知道我们使用了代理,并且也知道我们的真实 IP 。 透明代理访问目标服务器所带的 HTTP 头信息如下:

REMOTE_ADDR = 代理服务器IP
HTTP_VIA = 代理服务器IP
HTTP_X_FORWARDED_FOR = 我们的真实IP
透明代理还是将我们的真实IP发送给了对方服务器,因此无法达到隐藏身份的目的。

匿名代理
目标服务器可以知道我们使用了代理,但不知道我们的真实 IP 。匿名代理访问目标服务器所带的 HTTP 头信息如下:

REMOTE_ADDR = 代理服务器IP
HTTP_VIA = 代理服务器IP
HTTP_X_FORWARDED_FOR = 代理服务器IP
匿名代理隐藏了我们的真实IP,但是向目标服务器透露了我们是使用代理服务器访问他们的。

高匿代理
目标服务器不知道我们使用了代理,更不知道我们的真实 IP 。高匿代理访问目标服务器所带的 HTTP 头信息如下:

REMOTE_ADDR = 代理服务器IP
HTTP_VIA 不显示
HTTP_X_FORWARDED_FOR 不显示
高匿代理隐藏了我们的真实 IP ,同时目标服务器也不知道我们使用了代理,因此隐蔽度最高。

可以看到,处于中间态的匿名代理,事情做了一半没做完,反而是没什么用武之地的。

代理设置
上面我们看到了一些代理服务,接下来我们看一下各种 HTTP 请求库设置代理的方式:

urllib
我们先使用 urllib 来做测试,测试的链接就选择:http://www.jshk.com.cn/mb/reg.asp?kefu=xiaoding 这个我们之前用过的测试链接,访问该站点可以得到请求的一些相关信息,其中 origin 字段就是请求来源的 IP,我们可以根据它来判断代理是否设置成功,也就是是否成功伪装了 IP ,代理嘛小编就在网上随便找了个免费的高匿代理,示例如下:

from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener

proxy_handler = ProxyHandler({
http://www.jshk.com.cn/mb/reg.asp?kefu=xiaoding
})
opener = build_opener(proxy_handler)
try:
response = opener.open(‘https://httpbin.org/get’)
print(response.read().decode(‘utf-8’))
except URLError as e:
print(e.reason)
代码很简单,我们看下执行结果:

{
“args”: {},
“headers”: {
“Accept-Encoding”: “identity”,
“Host”: “httpbin.org”,
“User-Agent”: “Python-urllib/3.7”
},
“origin”: “117.69.150.84, 117.69.150.84”,
“url”: “https://httpbin.org/get”
}
可以看到,目标服务器已经认为我们是由代理访问的了, origin 参数显示的是我们的代理服务器的 IP 。

注意: 这里我们使用了 ProxyHandler 来进行代理设置,ProxyHandler 的参数类型是字典类型, key 是我们使用的协议,而值是我们具体所使用的代理,小编这里设置了两个代理,一个是 http 的还有一个是 https 的,当我们请求的链接是 http 的会自动的选择我们的 http 的代理,当我们的请求的链接是 https 的时候则会自动的选择我们设置的 https 的代理。

Requests
对于 Requests 来讲,代理的设置更加的简单加直白。示例代码如下:

import requests

proxies = {
http://www.jshk.com.cn/mb/reg.asp?kefu=xiaoding
}
try:
response = requests.get(‘https://httpbin.org/get’, proxies = proxies)
print(response.text)
except requests.exceptions.ConnectionError as e:
print(‘Error’, e.args)
结果如下:

{
“args”: {},
“headers”: {
“Accept”: “/”,
“Accept-Encoding”: “gzip, deflate”,
“Host”: “httpbin.org”,
“User-Agent”: “python-requests/2.22.0”
},
“origin”: “222.95.241.6, 222.95.241.6”,
“url”: “https://httpbin.org/get”
}
小编这里选择的还是高匿代理,所以这里显示出来的 IP 还是我们代理的 IP 。

Selenium
Selenium 同样可以设置代理,同时也非常简单,示例如下:

from selenium import webdriver

proxy = ‘222.95.241.6:3000’
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(‘–proxy-server=https://’ + proxy)
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(‘https://httpbin.org/get’)
结果如下:

设置 FireFox 浏览器和设置 Chrome 浏览器近乎一样,唯一的区别就是在初始化的时候初始化一个 FireFox ,并且在这是启动参数的是时候使用
FirefoxOptions()
方法,其他的无任何区别,同学们可以自己尝试下。

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...