跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教python代码问题
未分類
12 3 月 2020

请教python代码问题

大帅锅 大佬有话说 :

请教python代码问题

#!/usr/bin/env python
# coding:utf-8
import sys
import BaseHTTPServer
import httplib
import SocketServer
import struct
import socket
import select
import threading
import logging
import urlparse

import flashGet

BIND_IP = ‘0.0.0.0’
BIND_PORT = 27015# I love Counter-Strike

# flashGet.debuglevel = 1
logging._srcfile = None
logging.logProcesses = 0
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(asctime)s – %(message)s’, datefmt=’%H:%M:%S’)

urlparse.MAX_CACHE_SIZE = 100

class ProxyServer(SocketServer.ThreadingTCPServer):
    allow_reuse_address = True
    daemon_threads = True

class ProxyRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler, object):
    # Set this to HTTP/1.1 to enable automatic keepalive
    protocol_version = ‘HTTP/1.1’
   
    def parse_request(self):
      if not super(ProxyRequestHandler, self).parse_request():
                return False

      pconntype = self.headers.get(‘Proxy-Connection’, ”)
      if ‘close’ in pconntype.lower():# some say closed
                self.close_connection = 1
      elif (pconntype.lower() == ‘keep-alive’ and
                  self.protocol_version >= ‘HTTP/1.1’):
                self.close_connection = 0
      return True

    def handle_one_request(self):
      self.stopped = threading.Event() #TODO: need refine
      self.raw_requestline = self.rfile.readline()
      if not self.raw_requestline:
                self.close_connection = 1
                return
      if not self.parse_request():
                # An error code has been sent, just exit
                return

      if self.get_scheme() != ‘http’:
                self.send_error(501, ‘%s is not supported, only http works.’ % self.get_scheme())
                return

      # self.headers = BaseHTTPRequestHandler.headers = instance of mimetools.Message
      fg = flashGet.FlashGet(
                method=self.command,
                url=self.path,
                payload=self.client_request_body(),
                headers=self.headers.dict,
                stopped = self.stopped
      )
      for data in fg.download():
                self.wfile.write(data)

      self.wfile.flush()# actually send the response if not already done.

    def handle(self):
      """Handle multiple requests if necessary."""
      self.close_connection = 1

      try:
                self.handle_one_request()
                # while not self.close_connection:
                #      self.handle_one_request()
      except socket.error as e:
                self.stopped.set()
                self.send_error(500, str(e))

    def client_request_body(self):
      content_length = int(self.headers.get(‘Content-Length’, 0))
      return self.rfile.read(content_length) if content_length else None

    def get_scheme(self):
      url_obj = urlparse.urlparse(self.path, scheme=’grass-mud-horse’)
      if url_obj.scheme == ‘grass-mud-horse’:
            self.path = ‘http://’+self.path
            return ‘http’
      return url_obj.scheme

    def send_error(self, code, message):
      #TODO: use logging for thread-safe
      super(ProxyRequestHandler, self).send_error(code, message)

def main():
    if sys.argv:
      port = int(sys.argv)
    else:
      port = BIND_PORT
            
    server_address = (BIND_IP, port)
    httpd = ProxyServer(server_address, ProxyRequestHandler)

    sa = httpd.server_address
    print "Serving proxy on", sa, "port", sa, "…"
    httpd.serve_forever()

if __name__ == ‘__main__’:
    main()

这段代码如何修改让其支持https的访问?目前只能访问http

usbcdrom 大佬有话说 :

BUZHIDAO

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具