Python程序中安装HTTP代理,https代理的实例解说

by admin on 2019年5月30日

在境内使用Python从Internet上爬取数据时,有个别网站或API接口被限制速度或屏蔽,那时使用代理能够加快爬取进程,收缩请求战败,Python程序行使代理的格局首要有以下两种:

0x00 前言

Python程序中装置HTTP代理,python程序http代理

Python程序中安装HTTP代理,https代理的实例解说。0x00 前言

大家对HTTP代理应该都特别纯熟,它在广大上边都享有极为常见的应用。HTTP代理分为正向代理和反向代理两种,后者一般用来将防火墙前面包车型大巴服务提供给用户访问仍然实行负荷均衡,标准的有Nginx、HAProxy等。本文所商量的是正向代理。

HTTP代理最广泛的用处是用来互联网共享、网络加速和互连网范围突破等。其余,HTTP代理也常用于Web应用调节和测试、Android/IOS
APP 中所调用的Web API监察和控制和深入分析,近日的盛名软件有Fiddler、查尔斯、Burp
Suite和mitmproxy等。HTTP代理还可用以请求/响应内容改造,在不退换服务端的意况下为Web应用扩张额外的功能还是改造使用行为等。

0x0一 HTTP代理是怎么着

HTTP代理本质上是二个Web应用,它和任何普通Web应用尚未根本差别。HTTP代理收到请求后,依照Header中Host字段的主机名和Get/POST请求地址综合判别指标主机,创设新的HTTP请求并转账呼吁数据,并将接收的响应数据转发给客户端。

倘使请求地址是纯属地址,HTTP代理选取该地点中的Host,不然使用Header中的HOST字段。做3个大致测试,如果互连网处境如下:

192.168.1.2 Web服务器
192.168.1.3 HTTP代理服务器

运用telnet进行测试

$ telnet 192.168.1.3
GET / HTTP/1.0
HOST: 192.168.1.2

只顾最终索要三番五次七个回车,那是HTTP协议需求。实现后,能够收到
的页面内容。下边做一下调动,GET请求时带上相对地址

$ telnet 192.168.1.3
GET http://httpbin.org/ip HTTP/1.0
HOST: 192.168.1.2

只顾这里同样设置了HOST为1玖二.16八.1.二,但运营结果却重回了
页面包车型大巴内容,约等于公网IP地址消息。

从下边包车型大巴测试进度能够见见,HTTP代理并不是何等很复杂的事物,只要将原来请求发送到代理服务器就可以。在不能设置HTTP代理的意况下,对于一丢丢Host供给走HTTP代理的风貌来讲,最简易的法子便是将指标Host域名的IP指向代理服务器,可以动用修改hosts文件的办法来兑现。

0x0二 Python程序中设置HTTP代理

urllib2/urllib 代理设置

urllib2是Python规范库,作用很有力,只是采取起来有些麻烦一点。在Python
3中,urllib二不再保留,迁移到了urllib模块中。urllib第22中学经过ProxyHandler来设置使用代理服务器。

proxy_handler = urllib2.ProxyHandler({'http': '121.193.143.249:80'})
opener = urllib2.build_opener(proxy_handler)
r = opener.open('http://httpbin.org/ip')
print(r.read())

也得以用install_opener将配备好的opener安装到全局景况中,那样具备的urllib二.urlopen都会自行使用代理。

urllib2.install_opener(opener)
r = urllib2.urlopen('http://httpbin.org/ip')
print(r.read())

在Python 3中,使用urllib。

proxy_handler = urllib.request.ProxyHandler({'http': 'http://121.193.143.249:80/'})
opener = urllib.request.build_opener(proxy_handler)
r = opener.open('http://httpbin.org/ip')
print(r.read())

requests 代理设置

requests是眼前最雅观的HTTP库之壹,也是本身日常协会http请求时采取最多的库。它的API设计丰富人性化,使用起来很轻松上手。给requests设置代理很轻易,只要求给proxies设置二个形如
{‘http’: ‘x.x.x.x:8080’, ‘https’: ‘x.x.x.x:8080’}
的参数就能够。当中http和https互相独立。

In [5]: requests.get('http://httpbin.org/ip', proxies={'http': '121.193.143.249:80'}).json()
Out[5]: {'origin': '121.193.143.249'}

能够平素设置session的proxies属性,省去每一遍请求都要带上proxies参数的困苦。

s = requests.session()
s.proxies = {'http': '121.193.143.249:80'}
print(s.get('http://httpbin.org/ip').json())

0x03 HTTP_PROXY / HTTPS_PROXY 情形变量

urllib贰 和 Requests 库都能分辨 HTTP_PROXY 和 HTTPS_PROXY
景况变量,壹旦检验到那么些蒙受变量就能活动安装使用代理。那在用HTTP代理进行调试的时候非常有用,因为不用修改代码,能够任性依照境遇变量来调解代理服务器的ip地址和端口。*nix中的超过4/8软件也都援救HTTP_PROXY景况变量识别,比方curl、wget、axel、aria二c等。

$ http_proxy=121.193.143.249:80 python -c 'import requests; print(requests.get("http://httpbin.org/ip").json())'
{u'origin': u'121.193.143.249'}

$ http_proxy=121.193.143.249:80 curl httpbin.org/ip
{
 "origin": "121.193.143.249"
}

在IPython交互情形中,大概时时必要一时半刻地调节和测试HTTP请求,能够大致通过安装
os.environ[‘http_proxy’] 扩充/撤销HTTP代理来兑现。

In [245]: os.environ['http_proxy'] = '121.193.143.249:80'
In [246]: requests.get("http://httpbin.org/ip").json()
Out[246]: {u'origin': u'121.193.143.249'}
In [249]: os.environ['http_proxy'] = ''
In [250]: requests.get("http://httpbin.org/ip").json()
Out[250]: {u'origin': u'x.x.x.x'}

0x04 MITM-Proxy

MITM 源于 Man-in-the-Middle
Attack,指中间人抨击,一般在客户端和服务器之间的互联网中阻止、监听和歪曲数据。

mitmproxy
是一款Python语言开拓的开源中间人代办神器,支持SSL,辅助透明朝理、反向代理,援助流量摄像重放,协理自定义脚本等。功效上同Windows中的
Fiddler
有个别近乎,但mitmproxy是壹款console程序,未有GUI分界面,可是用起来还算方便。使用mitmproxy能够很有利的过滤、拦截、修改大4经过代理的HTTP请求/响应数据包,以至能够运用它的scripting
API,编写脚本达到机关拦截修改HTTP数据的目标。

# test.py
def response(flow):
  flow.response.headers["BOOM"] = "boom!boom!boom!"

下面的脚本会在具备通过代理的Http响应秦皇岛里面增添四个名叫BOOM的header。用
mitmproxy -s ‘test.py’
命令运维mitmproxy,curl验证结果发掘真正多了一个BOOM头。

$ http_proxy=localhost:8080 curl -I 'httpbin.org/get'
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 03 Nov 2016 09:02:04 GMT
Content-Type: application/json
Content-Length: 186
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
BOOM: boom!boom!boom!
...

光天化日mitmproxy脚本能做的事体远不唯有这几个,结合Python庞大的功能,能够衍生卓越多利用门路。除了这么些之外,mitmproxy还提供了庞大的API,在这一个API的基础上,完全能够友善定制1个兑现了特种成效的附属代理服务器。

通过质量测试,发现mitmproxy的频率并不是专程高。假如只是用来调节和测试指标那万幸,但尽管要用到生育情形,有雅量产出请求通过代理的时候,品质还是有一些差一点。笔者用twisted完成了多个简短的proxy,用于给合营社内部网址扩张效益、改良用户体验,未来有机遇再和豪门享受。

0x00
前言
我们对HTTP代理应该都不行熟谙,它在不知凡四地点都具有极为广阔的应用。HTTP代理分为正…

玩Python之HTTP代理

(1)只如若在代码中央银行使一些互连网库或爬虫框架进行数据爬取,一般这种框架都会支撑设置代理,举个例子:

世家对HTTP代理应该都卓绝纯熟,它在多数方面都富有极为广阔的行使。HTTP代理分为正向代理和反向代理三种,后者一般用来将防火墙前边的劳务提要求用户访问依旧举办负荷均衡,标准的有Nginx、HAProxy等。本文所商酌的是正向代理。

0x00 前言

Python程序中安装HTTP代理,https代理的实例解说。我们对HTTP代理应该都极其纯熟,它在无数地点都抱有极为广阔的应用。HTTP代理分为正向代理和反向代理二种,后者一般用于将防火墙后边的劳务提须求用户访问照旧进行负荷均衡,规范的有Nginx、HAProxy等。本文所商议的是正向代理。

HTTP代理最布满的用处是用以互联网共享、网络加速和网络范围突破等。别的,HTTP代理也常用来Web应用调节和测试、Android/IOS
应用程式 中所调用的Web API监察和控制和剖析,这段时间的显赫软件有Fiddler、查理、Burp
Suite和mitmproxy等。HTTP代理还可用于请求/响应内容退换,在不变服务端的情况下为Web应用扩张额外的作用依旧转移使用行为等。

import urllib.request as urlreq 
# 设置https代理 
ph = urlreq.ProxyHandler({'https': 'https://127.0.0.1:1080'}) 
oper = urlreq.build_opener(ph) 
# 将代理安装到全局环境,这样所有请求都会自动使用代理 
urlreq.install_opener(oper) 
res = oper.open("https://www.google.com") 
print(res.read()) 


import requests as req 
print(req.get("https://www.google.com", proxies={'https': 'https://127.0.0.1:1080'}).content) 

bf88必发唯一官网,HTTP代理最广泛的用处是用来网络共享、互连网加快和互连网范围突破等。其它,HTTP代理也常用来Web应用调节和测试、Android/IOS
应用程式 中所调用的Web API监察和控制和深入分析,这段日子的盛名软件有Fiddler、查尔斯、Burp
Suite和mitmproxy等。HTTP代理还可用以请求/响应内容改变,在不改造服务端的情状下为Web应用增加额外的效力还是改造使用行为等。

0x01 HTTP代理是怎么着

HTTP代理本质上是贰个Web应用,它和别的平日Web应用尚未一贯分歧。HTTP代理收到请求后,依据Header中Host字段的主机名和Get/POST请求地址综合推断指标主机,创建新的HTTP请求并转账呼吁数据,并将吸收接纳的响应数据转载给客户端。

若是请求地址是相对地址,HTTP代理选取该地方中的Host,不然使用Header中的HOST字段。做二个归纳测试,要是互连网意况如下:

  • 192.168.1.2 Web服务器
  • 1玖二.16八.壹.三 HTTP代理服务器

使用telnet举行测试

$ telnet 192.168.1.3
GET / HTTP/1.0
HOST: 192.168.1.2

小心最终索要一而再多个回车,那是HTTP协议供给。完毕后,能够接收
的页面内容。下边做一下调动,GET请求时带上相对地址

$ telnet 192.168.1.3
GET http://httpbin.org/ip HTTP/1.0
HOST: 192.168.1.2

小心这里同样设置了HOST为1玖二.16八.一.二,但运行结果却重返了
http://httpbin.org/ip
页面包车型地铁剧情,也正是公网IP地址音信。

从上面包车型客车测试进度可以见到,HTTP代理并不是哪些很复杂的东西,只要将原来请求发送到代理服务器就可以。在不能设置HTTP代理的气象下,对于一丢丢Host须要走HTTP代理的现象来讲,最简易的方法正是将指标Host域名的IP指向代理服务器,能够应用修改hosts文件的办法来兑现。

(2)假设运用的库未有提供设置代理的接口,不过底层使用了urllib、requests等库,能够尝尝设置HTTP_PROXY
和HTTPS_PROXY情形变量,常用的互连网库会自动识别那么些情状变量,使用变量设置的代理发起呼吁,设置如下:

0x0一 HTTP代理是如何

0x0二 Python程序中设置HTTP代理

import os 
os.environ['http_proxy'] = 'http://127.0.0.1:1080' 
os.environ['https_proxy'] = 'https://127.0.0.1:1080' 

HTTP代理本质上是2个Web应用,它和别的一般Web应用尚未一向分歧。HTTP代理收到请求后,根据Header中Host字段的主机名和Get/POST请求地址综合判断指标主机,创建新的HTTP请求并转化呼吁数据,并将收取的响应数据转载给客户端。

urllib2/urllib 代理设置

urllib2是Python标准库,成效很庞大,只是使用起来有一点点麻烦一点。在Python
3中,urllib二不再保留,迁移到了urllib模块中。urllib第22中学通过ProxyHandler来设置使用代理服务器。

proxy_handler = urllib2.ProxyHandler({'http': '121.193.143.249:80'})
opener = urllib2.build_opener(proxy_handler)
r = opener.open('http://httpbin.org/ip')
print(r.read())

也足以用install_opener将安顿好的opener安装到全局情形中,那样全体的urllib二.urlopen都会自动使用代理。

urllib2.install_opener(opener)
r = urllib2.urlopen('http://httpbin.org/ip')
print(r.read())

在Python 3中,使用urllib。

proxy_handler = urllib.request.ProxyHandler({'http': 'http://121.193.143.249:80/'})
opener = urllib.request.build_opener(proxy_handler)
r = opener.open('http://httpbin.org/ip')
print(r.read())

(3)假定上述二种办法都未有用,那么还是能动用部分方可监听、拦截和改换互连网包的工具和库如(Fiddler、mitmproxy)来阻止http请求包并修改地址,到达使用代理的效果。

若果请求地址是纯属地址,HTTP代理选取该地址中的Host,不然使用Header中的HOST字段。做1个轻易易行测试,如若互连网景况如下:

requests 代理设置

requests是当下最赏心悦目的HTTP库之1,也是本身日常组织http请求时接纳最多的库。它的API设计特别人性化,使用起来很轻巧上手。给requests设置代理很简单,只须求给proxies设置一个形如
{'http': 'x.x.x.x:8080', 'https': 'x.x.x.x:8080'}
的参数就能够。在这之中http和https互相独立。

In [5]: requests.get('http://httpbin.org/ip', proxies={'http': '121.193.143.249:80'}).json()
Out[5]: {'origin': '121.193.143.249'}

可以间接设置session的proxies属性,省去每一趟请求都要带上proxies参数的分神。

s = requests.session()
s.proxies = {'http': '121.193.143.249:80'}
print(s.get('http://httpbin.org/ip').json())

以上那篇对python使用http、https代理的实例疏解就是小编分享给大家的全部内容了,希望能给大家四个参照他事他说加以侦察,也目的在于我们多多援救脚本之家。

192.168.1.2 Web服务器
192.168.1.3 HTTP代理服务器

0x03 HTTP_PROXY / HTTPS_PROXY 景况变量

urllib二 和 Requests 库都能鉴定区别 HTTP_PROXY 和 HTTPS_PROXY
情况变量,壹旦检查测试到那几个情形变量就能自动安装使用代理。那在用HTTP代理进行调整的时候特别有用,因为不用修改代码,能够随便依据处境变量来调节代理服务器的ip地址和端口。*nix中的大多数软件也都援救HTTP_PROXY遭受变量识别,比方curl、wget、axel、aria二c等。

$ http_proxy=121.193.143.249:80 python -c 'import requests; print(requests.get("http://httpbin.org/ip").json())'
{u'origin': u'121.193.143.249'}

$ http_proxy=121.193.143.249:80 curl httpbin.org/ip
{
  "origin": "121.193.143.249"
}

在IPython交互碰到中,或然时时索要权且地调节和测试HTTP请求,能够省略通过安装
os.environ['http_proxy'] 扩展/裁撤HTTP代理来促成。

In [245]: os.environ['http_proxy'] = '121.193.143.249:80'
In [246]: requests.get("http://httpbin.org/ip").json()
Out[246]: {u'origin': u'121.193.143.249'}
In [249]: os.environ['http_proxy'] = ''
In [250]: requests.get("http://httpbin.org/ip").json()
Out[250]: {u'origin': u'x.x.x.x'}

你或者感兴趣的小说:

  • Python
    request设置HTTPS代理代码深入分析
  • Python程序中装置HTTP代理
  • Python开采中爬虫使用代理proxy抓取网页的主意言传身教

运用telnet举行测试

0x04 MITM-Proxy

MITM 源于 Man-in-the-Middle
Attack,指中间人抨击,一般在客户端和服务器之间的网络中梗阻、监听和歪曲数据。

mitmproxy是1款Python语言开辟的开源中间人代办神器,扶助SSL,补助透宋代理、反向代理,援救流量录像回看,扶助自定义脚本等。功效上同Windows中的Fiddler有一点点近乎,但mitmproxy是一款console程序,未有GUI分界面,可是用起来还算方便。使用mitmproxy能够很有利的过滤、拦截、修改率性经过代理的HTTP请求/响应数据包,以至足以采纳它的scripting
API,编写脚本到达机关拦截修改HTTP数据的指标。

# test.py
def response(flow):
    flow.response.headers["BOOM"] = "boom!boom!boom!"

上边的脚本会在有着通过代理的Http响应岳阳里面增加二个名叫BOOM的header。用mitmproxy -s 'test.py'指令运行mitmproxy,curl验证结果发掘真正多了三个BOOM头。

$ http_proxy=localhost:8080 curl -I 'httpbin.org/get'
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 03 Nov 2016 09:02:04 GMT
Content-Type: application/json
Content-Length: 186
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
BOOM: boom!boom!boom!
...

显著mitmproxy脚本能做的专门的学问远不唯有那几个,结合Python庞大的法力,能够衍生出过多用到门路。除却,mitmproxy还提供了强劲的API,在那几个API的功底上,完全能够和睦定制3个兑现了卓殊功能的附属代理服务器。

由此质量测试,开采mitmproxy的频率并不是专程高。假设只是用来调节和测试目标那辛亏,但借使要用到生产意况,有雅量油不过生请求通过代办的时候,品质依然有一点点差十分少。笔者用twisted达成了五个简练的proxy,用于给公司里面网址扩展效益、革新用户体验,现在有机遇再和我们享受。

$ telnet 192.168.1.3
GET / HTTP/1.0
HOST: 192.168.1.2

在意最后索要连接多少个回车,那是HTTP协议需求。完成后,能够采取
的页面内容。上面做一下调度,GET请求时带上相对地址

$ telnet 192.168.1.3
GET http://httpbin.org/ip HTTP/1.0
HOST: 192.168.1.2

在意这里同样设置了HOST为1九二.16八.壹.二,但运营结果却回到了
页面包车型地铁原委,也等于公网IP地址消息。

从地点的测试进程能够看到,HTTP代理并不是怎么着很复杂的事物,只要将原有请求发送到代理服务器就可以。在不能够设置HTTP代理的状态下,对于少许Host要求走HTTP代理的气象来讲,最简单易行的主意就是将目的Host域名的IP指向代理服务器,能够使用修改hosts文件的章程来贯彻。

0x0二 Python程序中设置HTTP代理

urllib2/urllib 代理设置

urllib2是Python标准库,功效很强劲,只是利用起来有一些麻烦一点。在Python
三中,urllib二不再保留,迁移到了urllib模块中。urllib第22中学通过ProxyHandler来设置使用代理服务器。

proxy_handler = urllib2.ProxyHandler({'http': '121.193.143.249:80'})
opener = urllib2.build_opener(proxy_handler)
r = opener.open('http://httpbin.org/ip')
print(r.read())

也能够用install_opener将配置好的opener安装到全局景况中,那样具备的urllib贰.urlopen都会活动使用代理。

urllib2.install_opener(opener)
r = urllib2.urlopen('http://httpbin.org/ip')
print(r.read())

在Python 3中,使用urllib。

proxy_handler = urllib.request.ProxyHandler({'http': 'http://121.193.143.249:80/'})
opener = urllib.request.build_opener(proxy_handler)
r = opener.open('http://httpbin.org/ip')
print(r.read())

requests 代理设置

requests是时下最美好的HTTP库之一,也是本人平时结构http请求时行使最多的库。它的API设计丰富人性化,使用起来很轻易上手。给requests设置代理很轻巧,只须求给proxies设置3个形如
{‘http’: ‘x.x.x.x:8080’, ‘https’: ‘x.x.x.x:8080’}
的参数就能够。当中http和https相互独立。

In [5]: requests.get('http://httpbin.org/ip', proxies={'http': '121.193.143.249:80'}).json()
Out[5]: {'origin': '121.193.143.249'}

能够向来设置session的proxies属性,省去每趟请求都要带上proxies参数的劳苦。

s = requests.session()
s.proxies = {'http': '121.193.143.249:80'}
print(s.get('http://httpbin.org/ip').json())

0x03 HTTP_PROXY / HTTPS_PROXY 情形变量

urllib二 和 Requests 库都能分辨 HTTP_PROXY 和 HTTPS_PROXY
情况变量,1旦检查评定到那个遇到变量就可以自动安装使用代理。那在用HTTP代理举办调节的时候非常有用,因为不用修改代码,能够专擅依照情形变量来调解代理服务器的ip地址和端口。*nix中的一大半软件也都协助HTTP_PROXY情形变量识别,比方curl、wget、axel、aria2c等。

$ http_proxy=121.193.143.249:80 python -c 'import requests; print(requests.get("http://httpbin.org/ip").json())'
{u'origin': u'121.193.143.249'}

$ http_proxy=121.193.143.249:80 curl httpbin.org/ip
{
 "origin": "121.193.143.249"
}

在IPython交互情形中,恐怕时时索要一时地调节和测试HTTP请求,能够简轻便单通过安装
os.environ[‘http_proxy’] 扩展/撤消HTTP代理来贯彻。

In [245]: os.environ['http_proxy'] = '121.193.143.249:80'
In [246]: requests.get("http://httpbin.org/ip").json()
Out[246]: {u'origin': u'121.193.143.249'}
In [249]: os.environ['http_proxy'] = ''
In [250]: requests.get("http://httpbin.org/ip").json()
Out[250]: {u'origin': u'x.x.x.x'}

0x04 MITM-Proxy

MITM 源于 Man-in-the-Middle
Attack,指中间人攻击,一般在客户端和服务器之间的网络中阻止、监听和篡改数据。

mitmproxy
是1款Python语言开辟的开源中间人代办神器,扶助SSL,帮助透南宋理、反向代理,辅助流量录制重播,接济自定义脚本等。成效上同Windows中的
Fiddler
有些看似,但mitmproxy是1款console程序,未有GUI分界面,不过用起来还算方便。使用mitmproxy能够很方便的过滤、拦截、修改任性经过代理的HTTP请求/响应数据包,以致能够动用它的scripting
API,编写脚本到达机关拦截修改HTTP数据的指标。

# test.py
def response(flow):
  flow.response.headers["BOOM"] = "boom!boom!boom!"

地点的脚本会在颇具通过代理的Http响应湖州里面增加八个名称叫BOOM的header。用
mitmproxy -s ‘test.py’
命令运维mitmproxy,curl验证结果发掘真正多了1个BOOM头。

$ http_proxy=localhost:8080 curl -I 'httpbin.org/get'
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 03 Nov 2016 09:02:04 GMT
Content-Type: application/json
Content-Length: 186
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
BOOM: boom!boom!boom!
...

料定mitmproxy脚本能做的业务远不仅那么些,结合Python强大的功用,能够衍生出过多用到门路。除此而外,mitmproxy还提供了有力的API,在这么些API的基本功上,完全能够和煦定制几个落成了特殊功效的依赖代理服务器。

透过品质测试,发掘mitmproxy的功能并不是专程高。假使只是用于调节和测试目标这还好,但倘使要用到生产条件,有大气冒出请求通过代办的时候,质量依然有一点点差那么一点。小编用twisted实现了3个简易的proxy,用于给公司里面网址扩张效果、革新用户体验,未来有机会再和豪门享用。

您恐怕感兴趣的作品:

  • 批量赢得及表达HTTP代理的Python脚本
  • python达成代理服务效能实例
  • 使用Python爬取可用的代理IP
  • Python使用代理抓取网站图片(八线程)
  • python实现轻易的TCP代理服务器
  • 为python设置socket代理的点子
  • Python代理抓取并证实使用102线程落成
  • Python爬虫代理IP池完毕情势
  • Python设计形式之代理形式实例
  • Python三.四落实从HTTP代理网址批量赢得代理并筛选的办法言传身教

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图