首页 > 代码库 > python 实现简单 http 代理
python 实现简单 http 代理
有台 openwrt 路由器,16M flash存储 + 64M 内存 ,可以装 python 。因为没有自带 url 网站访问记录,想手写一个。
原理:
http 1.1 也就是 tcp 连接,有 header 和 body
使用 python listen 8000 端口
设置浏览器,使用 localhost 8000 http 代理方式
源码 py2.7:
1 #coding:utf-8 2 import socket 3 import sys 4 import re 5 import os 6 import time 7 8 host = ‘0.0.0.0‘ 9 port = 800010 11 #创建socket对象12 proxy_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)13 try:14 proxy_sock.bind((host,port))15 except:16 sys.exit("python proxy bind error ")17 18 print "python proxy open"19 20 proxy_sock.listen(1024)21 while True:22 conn,addr = proxy_sock.accept()23 os.fork()24 print "client connent:{0}:{1}".format(addr[0], addr[1])25 26 #接收数据27 client_data = http://www.mamicode.com/conn.recv(1024)28 29 #分析得到 header 信息30 header = client_data.split("\r\n")31 host = header[1].split(":")[1].strip()32 url = header[0].split(" ")[1].strip()33 34 #统计访问记录35 print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))36 print host 37 print url38 39 #建立连接40 http_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)41 http_sock.connect((host, 80))42 http_sock.sendall(client_data)43 while(True):44 http_data = http://www.mamicode.com/http_sock.recv(1024)45 if http_data:46 conn.send(http_data)47 else:48 break49 http_sock.close()50 51 #关闭所有连接52 proxy_sock.close()53 print "python proxy close"
从 header 中 可以提取到,访问的网址, cookie 等信息,理论上 非 https 也可以提取到 post 的信息。
缺点是,性能不好,没有实现 Connection : keep-alive
因为使用了 fork() win 中 应该是不能用。
看来,还是要加在网卡驱动中比较好。
python 实现简单 http 代理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。