亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? http_server.py

?? 一個java寫的proxy的例子
?? PY
字號:
from proxy4_base import *from connection import *# DEBUGGINGPRINT_SERVER_HEADERS = 1SPEEDCHECK_START = time.time()SPEEDCHECK_BYTES = 0# TODO: there should be an API for this class, and it should be moved# elsewhereclass Server(Connection):    def __init__(self, client):        self.client = client        Connection.__init__(self)            def client_abort(self):        self.client = None        if self.connected:            self.close()class HttpServer(Server):    def __init__(self, ipaddr, port, client):        self.addr = (ipaddr, port)        self.hostname = ''        self.document = ''        self.response = ''        self.headers = None        self.decoders = [] # Handle each of these, left to right        self.sequence_number = 0 # For persistent connections        Server.__init__(self, client)        self.attempt_connect()    def __repr__(self):        extra = self.request()        if len(extra) > 46: extra = extra[:43] + '...'        return '<%s:%-8s %s>' % (color(4, 'server'), self.state, extra)    def writable(self):        # It's writable if we're connecting .. TODO: move this        # logic into the Connection class        return self.state == 'connect' or self.send_buffer != ''        def request(self):        portstr = ''        if self.addr[1] != 80: portstr = ':%s' % self.addr[1]        return '%s%s%s' % (self.hostname or self.addr[0],                            portstr, self.document)        def attempt_connect(self):        self.state = 'connect'        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)        try: self.connect(self.addr)        except socket.error, err:            message(6, 'connect error', None, None, err)            self.handle_error(socket.error, err)            return    def handle_connect(self):        #message(None, 'handle_conn', None, None, self)        assert self.state == 'connect'        self.state = 'client'        Connection.handle_connect(self)        if self.client:            # We have to delay this because we haven't gone through the            # handle_connect completely, and the client expects us to            # be fully connected when it is notified.  After the            # delay, the client might be gone.  Example: the connection            # times out, and it calls handle_connect, then handle_write.            # The handle_write notices the error, so it disconnects us            # from the client.  THEN the timer runs and we can't say            # we've connected, because we really haven't.  NOTE: we            # really should hide these sorts of cases inside Connection.            make_timer(0, lambda s=self: s.client and s.client.server_connected(s))        else:            # Hm, the client no longer cares about us, so close            self.reuse()    def send_request(self):        self.write('%s %s HTTP/1.1\r\n' % (self.method, self.document))        for header in self.client.headers.headers:            self.write(header)        self.write('Connection: Keep-Alive\r\n') # TODO: modify existing header        self.write('\r\n')        self.write(self.content)        self.state = 'response'            def client_send_request(self, method, hostname, document, headers,                            content, client):        assert self.state == 'client'                self.client = client        self.method = method        self.hostname = hostname        self.document = document        self.content = content        self.send_request()            def process_response(self):        i = find(self.recv_buffer, '\n')        if i < 0: return                self.response = self.read(i+1)        if find(self.response, 'HTTP') >= 0:            # Okay, we got a valid response line            self.state = 'headers'            # Let the server pool know what version this is            http_match.serverpool.set_http_version(self.addr,                                                   self.http_version())        elif not strip(self.response):            # It's a blank line, so assume HTTP/0.9            self.headers = rfc822.Message(StringIO(''))            self.bytes_remaining = None            self.decoders = []            self.state = 'content'            self.client.server_response(self.response, self.headers)        else:            # We have no idea what it is!?            message(6, 'Warning', None, None, 'puzzling header received ', `self.response`)    def process_headers(self):        # Headers are terminated by a blank line .. now in the regexp,        # we want to say it's either a newline at the beginning of        # the document, or it's a lot of headers followed by two newlines.        # The cleaner alternative would be to read one line at a time        # until we get to a blank line...        m = re.match(r'^((?:[^\r\n]+\r?\n)*\r?\n)', self.recv_buffer)        if not m: return                self.headers = rfc822.Message(StringIO(self.read(m.end())))        if self.headers.has_key('content-length'):            self.bytes_remaining = int(self.headers.getheader('content-length'))        else:            self.bytes_remaining = None        response = split(self.response)        if response and response[1] == '100':            # It's a Continue request, so go back to waiting for            # headers.            self.state = 'response'            return        if PRINT_SERVER_HEADERS:            print color(4, ' ______')+color(7, ' Server headers ', 4)+color(4, '_'*(79-25))            print color(4, '|'), 'http://'+self.request()            print color(4, '|'), self.response,            print color(4, '|'), join(self.headers.headers, color(4, '| ')), color(4, '|' + '_'*(79-1))        self.decoders = []        if self.headers.has_key('transfer-encoding'):            print 'Transfer-encoding:', \                  color(2, self.headers['transfer-encoding'])            self.decoders.append(encoding_chunked.UnchunkStream())            # HACK - remove encoding header            for h in self.headers.headers[:]:                if re.match('transfer-encoding:', lower(h)):                    self.headers.headers.remove(h)                elif re.match('content-length:', lower(h)):                    assert 0, 'chunked encoding should not have content-length'        if self.headers.has_key('content-encoding') and self.headers['content-encoding'] == 'gzip':            print 'Content-encoding:', color(2, 'gzip')            self.decoders.append(encoding_gzip.GunzipStream())            # HACK - remove content length and encoding            for h in self.headers.headers[:]:                if re.match('content-length:', lower(h)):                    self.headers.headers.remove(h)                elif re.match('content-encoding:', lower(h)):                    self.headers.headers.remove(h)        self.client.server_response(self.response, self.headers)        if ((response and response[1] in ('204', '304')) or            self.method == 'HEAD'):            # These response codes indicate no content            self.state = 'recycle'        else:            self.state = 'content'    def process_content(self):        data = self.read(self.bytes_remaining)        if self.bytes_remaining is not None:            # If we do know how many bytes we're dealing with,            # we'll close the connection when we're done            self.bytes_remaining = self.bytes_remaining - len(data)        filtered_data = data        is_closed = 0        for decoder in self.decoders:            filtered_data = decoder.decode(filtered_data)            is_closed = decoder.closed or is_closed        if filtered_data: self.client.server_content(filtered_data)        if (is_closed or            (self.bytes_remaining is not None and             self.bytes_remaining <= 0)):            # Either we ran out of bytes, or the filter says we're done            self.state = 'recycle'    def process_recycle(self):        # We're done sending things to the client, and we can reuse        # this connection        client = self.client        self.reuse()        # Allow each decoder to flush its data, passing it through        # other decoders        while self.decoders:            data = self.decoders[0].flush()            del self.decoders[0]            for decoder in self.decoders:                data = decoder.decode(data)            if data: client.server_content(data)        client.server_close()    def process_read(self):        global SPEEDCHECK_BYTES        if self.state in ('connect', 'client'):            assert 0, ('server should not receive data in %s state' %                       self.state)        while 1:            if not self.client:                # By the time this server object was ready to receive                # data, the client has already closed the connection!                # We never received the client_abort because the server                # didn't exist back when the client aborted.                self.client_abort()                return                        bytes_before = len(self.recv_buffer)            state_before = self.state                        try: handler = getattr(self, 'process_'+self.state)            except AttributeError: handler = lambda:None # NO-OP            handler()                        bytes_after = len(self.recv_buffer)            if (self.client is None or                (bytes_before == bytes_after and state_before == self.state)):                break    def http_version(self):        if not self.response: return 0        version = re.match(r'.*HTTP/(\d+\.?\d*)\s*$', self.response)        if version:            return float(version.group(1))        else:            return 0.9            def reuse(self):        if self.http_version() >= 1.1:            can_reuse = 1            if (self.headers and self.headers.has_key('connection') and                self.headers['connection'] == 'close'):                can_reuse = 0        else:            can_reuse = 0            if (self.headers and self.headers.has_key('connection') and                lower(self.headers['connection']) == 'keep-alive'):                can_reuse = 1                        if not can_reuse:            # We can't reuse this connection            self.close()        else:            message(6, 'recycling', None, self.sequence_number, self)            self.sequence_number = self.sequence_number + 1            self.state = 'client'            self.document = ''            self.client = None            # Put this server back into the list of available servers            http_match.serverpool.unreserve_server(self.addr, self)            def close(self):        self.state = 'closed'        Connection.close(self)        http_match.serverpool.unregister_server(self.addr, self)    def handle_error(self, type, value, traceback=None):        Connection.handle_error(self, type, value, traceback)        if self.client:            client, self.client = self.client, None            client.server_abort()            def handle_close(self):        message(1, 'server close; '+self.state, None, None, self)        Connection.handle_close(self)        if self.client:            client, self.client = self.client, None            client.server_close()def speedcheck_print_status():    global SPEEDCHECK_BYTES, SPEEDCHECK_START    elapsed = time.time() - SPEEDCHECK_START    if elapsed > 0 and SPEEDCHECK_BYTES > 0:        print 'speed:', color(6, '%4d' % (SPEEDCHECK_BYTES/elapsed)), 'b/s'    SPEEDCHECK_START = time.time()    SPEEDCHECK_BYTES = 0    make_timer(5, speedcheck_print_status)    #if http_match.serverpool.map:    #    print 'server pool:'    #    for addr,set in http_match.serverpool.map.items():    #        for server,status in set.items():    #            print '  %15s:%-4d %10s %s' % (addr[0], addr[1],    #                                          status[0], server.hostname)import http_matchimport encoding_gzip, encoding_chunked    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产福利| 日韩精品一区二区三区老鸭窝| 亚洲午夜精品网| 久久午夜电影网| 欧美麻豆精品久久久久久| 国产91丝袜在线播放0| 丝袜美腿高跟呻吟高潮一区| 中文字幕av一区二区三区高| 91精品国产综合久久久久久| 91久久国产最好的精华液| 国产一区二区电影| 日韩av成人高清| 亚洲一区二区三区爽爽爽爽爽| 中文字幕的久久| 精品国精品国产尤物美女| 在线观看日韩av先锋影音电影院| 成人综合婷婷国产精品久久蜜臀| 久久精品免费观看| 丝瓜av网站精品一区二区| 亚洲三级在线播放| 久久国产精品99久久人人澡| 亚洲午夜三级在线| 亚洲精品v日韩精品| 国产精品三级电影| 国产偷国产偷精品高清尤物| 精品国产乱码久久久久久蜜臀 | 欧美日韩免费不卡视频一区二区三区| 粉嫩蜜臀av国产精品网站| 激情文学综合插| 麻豆精品在线播放| 美女国产一区二区| 奇米影视在线99精品| 日韩电影在线观看电影| 性做久久久久久免费观看| 亚洲最大成人网4388xx| 亚洲美女屁股眼交| 亚洲老妇xxxxxx| 亚洲另类色综合网站| 亚洲女与黑人做爰| 亚洲精品中文字幕在线观看| **网站欧美大片在线观看| 日韩码欧中文字| 亚洲青青青在线视频| 亚洲精品视频在线| 一区二区三区四区精品在线视频| 亚洲精品国久久99热| 亚洲最新在线观看| 天堂成人免费av电影一区| 日本午夜一本久久久综合| 麻豆精品一区二区| 国产麻豆日韩欧美久久| 国产99久久精品| 99精品在线观看视频| 91官网在线免费观看| 欧美日韩国产系列| 日韩欧美成人激情| 欧美高清一级片在线观看| 中文字幕在线不卡一区| 亚洲一区在线观看免费观看电影高清| 亚洲国产精品久久久久秋霞影院 | 久久久久久毛片| 国产精品色在线| 一区二区三区波多野结衣在线观看| 一区二区三区四区在线免费观看| 天天操天天色综合| 激情综合色综合久久| 国产91精品精华液一区二区三区| 色综合天天综合网国产成人综合天| 91高清视频在线| 日韩欧美www| 国产精品久久久久影院| 亚洲图片一区二区| 国产一区二区在线观看视频| caoporn国产一区二区| 欧美三级韩国三级日本一级| 欧美成人a∨高清免费观看| 国产精品每日更新| 香蕉久久一区二区不卡无毒影院| 韩国午夜理伦三级不卡影院| 99久久精品免费| 日韩三级电影网址| 亚洲欧美在线观看| 日本午夜精品一区二区三区电影 | 国产精品久久久久久久第一福利 | 欧美大片在线观看一区二区| 久久久久成人黄色影片| 亚洲免费观看高清完整版在线| 奇米精品一区二区三区在线观看| 粉嫩一区二区三区在线看| 欧美人xxxx| 国产精品久久影院| 日本不卡一区二区| 91视频一区二区三区| 精品国产乱码久久久久久1区2区 | 国产视频一区二区在线| 亚洲国产美女搞黄色| 国产寡妇亲子伦一区二区| 欧美老年两性高潮| 亚洲天堂2016| 国产尤物一区二区| 欧美日本韩国一区二区三区视频| 国产精品久久影院| 国产一区二区三区在线观看精品 | 亚洲成人你懂的| 不卡的av在线播放| wwwwxxxxx欧美| 青草国产精品久久久久久| 91原创在线视频| 亚洲国产精品国自产拍av| 久久国产福利国产秒拍| 欧美日韩免费在线视频| 亚洲欧美另类久久久精品2019| 国产一区二三区| 日韩欧美国产午夜精品| 午夜精品久久久久久久久久| 成人av资源网站| 久久久蜜桃精品| 久久av中文字幕片| 欧美一区二区女人| 日韩在线一区二区三区| 欧美日韩亚洲综合一区二区三区 | 不卡的av中国片| 久久久久久久久久久黄色| 免费久久精品视频| 欧美一级片在线看| 日本最新不卡在线| 欧美一区二区三区在线看| 亚洲第一狼人社区| 欧美日韩综合在线免费观看| 亚洲综合色自拍一区| 在线精品国精品国产尤物884a| 亚洲品质自拍视频| 色婷婷综合久色| 亚洲精品五月天| 欧美性欧美巨大黑白大战| 亚洲自拍偷拍欧美| 欧美综合一区二区三区| 亚洲一二三区不卡| 欧美高清hd18日本| 蜜臀av一区二区在线免费观看| 欧美一区二区三区在线看| 另类欧美日韩国产在线| 日韩欧美国产综合| 国产麻豆视频一区| 中文字幕五月欧美| 色婷婷综合五月| 五月婷婷色综合| 欧美sm美女调教| 国产精品亚洲一区二区三区妖精| 久久久久久免费毛片精品| 国产福利一区二区三区视频| 中文av一区二区| 一本色道综合亚洲| 午夜一区二区三区视频| 日韩一级片在线观看| 国产又粗又猛又爽又黄91精品| 欧美极品xxx| 91视频国产观看| 五月婷婷综合网| 国产亚洲短视频| 色噜噜久久综合| 免费观看在线综合| 国产欧美在线观看一区| 色综合天天综合网国产成人综合天| 一区二区成人在线观看| 日韩限制级电影在线观看| 激情小说欧美图片| 亚洲色大成网站www久久九九| 欧美日韩一区二区在线观看 | 成人亚洲一区二区一| 亚洲天堂av一区| 日韩欧美国产精品| 9色porny自拍视频一区二区| 午夜精品一区在线观看| 久久综合一区二区| 91黄色免费看| 国产精品123| 亚洲国产cao| 欧美国产视频在线| 欧美日韩免费电影| 不卡一二三区首页| 免费高清在线一区| 亚洲欧美日韩国产综合| 日韩免费高清视频| 91福利资源站| 国产盗摄一区二区| 日韩高清中文字幕一区| 国产欧美日韩在线观看| 91麻豆精品国产综合久久久久久| 国产成人亚洲综合a∨猫咪| 亚洲va韩国va欧美va精品 | 最好看的中文字幕久久| 91精品国产综合久久久久久漫画 | 国产一区二区精品在线观看| 亚洲免费电影在线| 国产视频一区二区在线| 欧美一区二区三区视频免费播放| 91视频在线看| 国产成人免费在线视频| 日产国产欧美视频一区精品|