python 实现代理服务器

复制代码
# encoding:utf-8
import socket
import thread
import re

def getAddr(d):
 a = re.search("Host: (.*)\r\n", d)
 host = a.group(1)
 a = host.split(":")
 if len(a) == 1:
  return (a[0], 80)
 else:
  return (a[0], int(a[1]))

def client(conn, caddr):
    while 1:
        try:
            data = conn.recv(4096)

            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            addr = getAddr(data)
            print "目的服务器:",addr
            s.connect(addr)
            print '发给目的服务器数据:',data
            s.sendall(data)#将请求数据发给目的服务器
            d = s.recv(40960)#接收目的服务器发过来的数据
            s.close()#断开与目的服务器的连接
            print '接收目的服务器数据:',d
            conn.sendall(d)#发送给代理的客户端
        except Exception, e:
            print '代理的客户端异常:%s, ERROR:%s'%(caddr,e)
            conn.close()
            break

def serve(PORT = 10086):
 # 创建
 IP = "0.0.0.0"
 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 s.bind((IP, PORT))
 s.listen(10)
 print 'proxy start...'
 while True:
  conn, addr = s.accept()
  print 'conn:', conn
  print "addr:", addr
  thread.start_new_thread(client, (conn, addr))

try:
 serve()
except Exception as e:
 print '代理服务器异常',e

print 'server end!!!'
复制代码

http 代理服务器。 无需指定目的服务器,自动读取地址并连接。

posted @   Please Call me 小强  阅读(10931)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示