2012-04-08 56 views
0

我正在用python編寫自己的代理服務器的代碼。從客戶端和目標服務器傳送的數據包的代碼如下:如何從通過代理傳輸的數據包中替換URL?

def _read_write(self): 
     if self.target: 
      pass 
     else: 
      domain, port = self.get_target_host() 
      self._connect_target(domain, port) 

     self.target.send(self.headers) 

     maxtimeout = self.timeout/3 
     inputs = [self.client, self.target] 
     count = 0 
     try: 

      while 1: 
       count += 1 
       (recv, send, err) = select.select(inputs, [], inputs) 

       if err: 
        break 

       if recv: 
        for in_ in recv: 
         data = in_.recv(BUFFLEN) 

         if in_ is self.client: 
          out = self.target 
         else: 
          out = self.client 

         if data: 
          out.send(data) 
          count = 0 
       if count == maxtimeout: 
        break 
     except select.error: 
      print >> sys.stderr, "Error : Internal queue error\n", "Reason : Unknown" 

現在,因爲每個分組單獨地從客戶端傳送到服務器,我要攔截正在傳送的數據和替換等資源的網址作爲圖像,CSS等與一些新的URL與客戶端距離最近的服務器。這是做到這一點的正確方法嗎?我想如果URL被數據包分開,我會遇到問題。

回答

0

右鍵 - 在數據包級別執行此操作很困難。更簡單的做法可能是首先在代理中構建整個數據,然後執行處理,然後將數據發送到客戶端。

+0

首先,我已經這樣做了,但出了問題。該腳本需要很長時間才能執行。我想要做的是用CDN URL替換URL。我無法找到關於如何開發CDN的任何信息。 – vedarthk 2012-04-08 21:46:30