2012-02-22 34 views
5

BaseHTTPServerモジュールを使用してWebサーバーを実行するためにPythonスクリプトを使用しています。以下は、サーバーのための私のコードです:Pythonを使用してHTTP POSTリクエストからIPアドレスを取得する

import string,cgi,time 
from os import curdir, sep 
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer 
#import pri 

class MyHandler(BaseHTTPRequestHandler): 

    def do_GET(self): 
     try: 
     if self.path.endswith("/"): 
     f = open(curdir + sep + "index.html") 
     self.send_response(200) 
     self.send_header('Content-type', 'text/html') 
     self.end_headers() 
     self.wfile.write("<HTML> GET OK.<BR>") 
     f.close() 
     return 

      return 

     except IOError: 
      self.send_error(404,'File Not Found: %s' % self.path) 


    def do_POST(self): 
     global rootnode 
     try: 
      ctype, pdict = cgi.parse_header(self.headers.getheader('content-type')) 
      if ctype == 'multipart/form-data': 
       query=cgi.parse_multipart(self.rfile, pdict) 
      self.send_response(200) 
      self.send_header('Content-type', 'text/html') 
     self.end_headers() 
     file = query.get('file') 
     self.wfile.write("<HTML> POST OK.<BR>") 
     f = open("data.zip", "wb") 
      f.write(file[0]) 
      f.close() 
      print("File received.") 
     return 

     except : 
      pass 

def main(): 
    try: 
     server = HTTPServer(('', 8080), MyHandler) 
     print 'started httpserver...' 
     server.serve_forever() 
    except KeyboardInterrupt: 
     print '^C received, shutting down server' 
     server.socket.close() 

if __name__ == '__main__': 
    main() 

は、私のサーバーは、それを受信したときに、POSTリクエストのIPアドレスを取得するために、とにかくありますか?事前に多くの感謝。

答えて

5

self.client_address[0]でIPアドレスを取得できるはずです。だけで正常に動作しself.request.remote_addr BaseHTTPServerライブラリを使用していない方のため

+0

私は '印刷self.client_address'を行うと、それは私のIPアドレスや番号を提供します。それはポート番号ですか? – androidnoob

+0

@androidnoob:はい、2番目の番号はクライアントのポートです。 IPアドレスだけが必要な場合は、最後に '[0]'を付けてください。 – icktoofay

+0

私は参照してください。迅速なお返事ありがとうございます!私はそれについて十分にあなたに感謝できません! – androidnoob

0

+0

IPがプロキシを指しているように、PythonがいくつかのWebサービスを使用してプロキシすると正しく動作しませんので、ヘッダーは 'X-Forwarded-For' – moka