2012-04-04 5 views
1
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler): 
    def do_POST(self): 
     ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) 
     postvars = {} 
     try: 
      if ctype == 'application/x-www-form-urlencoded': 
       length = int(self.headers.getheader('content-length')) 
       postvars = cgi.parse_qs(self.rfile.read(length), keep_blank_values=1) 

      self.send_response(200) 
      self.send_header("Content-type", "text") 
      self.send_header("Content-length", str(len(body))) 
      self.end_headers() 
      self.wfile.write(body) 
     except: 
      print "Error" 


def httpd(handler_class=MyHandler, server_address = ('2.3.4.5', 80)): 
    try: 
     print "Server started" 
     srvr = BaseHTTPServer.HTTPServer(server_address, handler_class) 
     srvr.serve_forever() # serve_forever 
    except KeyboardInterrupt: 
     server.socket.close() 


if __name__ == "__main__": 
    httpd() 

私はほとんどのコードを用意しています。クライアントが非アクティブである場合や10秒間応答しない場合(https://stackoverflow.com/a/265741/204623など)、接続を閉じるコードを追加する必要があります。基本的に私はsend_response()、wfile.write()などの呼び出しでサーバをブロックしたくないのですが、どうすればいいですか?タイムアウトのサポートを得るためにHTTPServerの代わりにTimeoutServerクラスを使用するとシンプルなHTTP POSTサーバーを構築するには?

import BaseHTTPServer 

class TimeoutServer(BaseHTTPServer.HTTPServer): 
    def get_request(self): 
     result = self.socket.accept() 
     result[0].settimeout(10) 
     return result 

+1

あなたはなぜこれを構築したいのか分かりませんが、たくさんのヒットを受け取ることはなく、POSTやGET以外の何かをする必要はなく、Googleに公開することはできませんApp Engineはセットアップが簡単です。 – apple16

答えて

3

はこれを試してみてください。

関連する問題