HTTP代理本质上是一个Web应用新萄京网址线路检测

作者: 综合体育  发布:2019-12-01

0x00 前言

我们对HTTP代理应该都充足精通,它在超级多方面都装有极为广泛的使用。HTTP代理分为正向代理和反向代理三种,前面一个常常用来将防火墙前边的劳务提需要顾客访谈照旧扩充负荷均衡,标准的有Nginx、HAProxy等。本文所研讨的是正向代理。

HTTP代理最布满的用项是用来互连网分享、网络加速和网络范围突破等。此外,HTTP代理也常用来Web应用调节和测验、Android/IOS APP 中所调用的Web API监察和控制和深入分析,目前的老品牌软件有Fiddler、查理、Burp Suite和mitmproxy等。HTTP代理还可用以央浼/响应内容改变,在不转移服务端的状态下为Web应用扩大额外的服从照旧改造使用行为等。

0x02 Python程序中安装HTTP代理

0x01 HTTP代理是哪些

HTTP代理本质上是多个Web应用,它和别的经常Web应用还没一贯差距。HTTP代理收到央求后,依照Header中Host字段的主机名和Get/POST要求地址综合判定指标主机,构造建设新的HTTP诉求并转载呼吁数据,并将选择的响应数据转载给客商端。

假如伏乞地址是绝对地址,HTTP代理采取该地址中的Host,不然使用Header中的HOST字段。做三个粗略测量试验,如若互联网景况如下:

  • 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为192.168.1.2,但运维结果却回到了 页面包车型大巴内容,相当于公网IP地址新闻。

从地点的测量试验进程能够见见,HTTP代理并非哪些很复杂的事物,只要将原本恳求发送到代理服务器就可以。在不能设置HTTP代理的情景下,对于一些些Host要求走HTTP代理的场景来讲,最简易的艺术正是将对象Host域名的IP指向代理服务器,能够行使改革hosts文件的点子来落到实处。

urllib2/urllib 代理设置

urllib2是Python规范库,功效很苍劲,只是选拔起来有些麻烦一点。在Python 3中,urllib2不再保留,迁移到了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安装到全局情况中,那样具备的urllib2.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 景况变量

urllib2 和 Requests 库都能辨识 HTTP_PROXY 和 HTTPS_PROXY 情形变量,风姿潇洒旦检验到这一个碰到变量就能够活动安装使用代理。这在用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是生机勃勃款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的幼功上,完全可以团结定制四个落到实处了异样功能的从属代理服务器。

透过质量测验,开采mitmproxy的功用并不是特意高。借使只是用于调节和测量检验指标那辛亏,但倘使要用到生育景况,有恢宏忍俊不禁须求通过代办的时候,品质如故多少差一些。笔者用twisted完毕了四个总结的proxy,用于给合作社内部网址扩张效果、改正顾客体验,现在有空子再和大家享受。

本文由新浦京3730发布于综合体育,转载请注明出处:HTTP代理本质上是一个Web应用新萄京网址线路检测

关键词: www.3730.com Python Proxy 代理 葡京娱乐网址