1. 程式人生 > >python 實現代理伺服器

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 代理伺服器。 無需指定目的伺服器,自動讀取地址並連線。