HTTP-сервер Python, хранящий полученное сообщение

У меня есть следующий код сервера. Он создает http-сервер Python.

Прямо сейчас он получает только информацию, отправленную клиентом, но я хочу иметь возможность хранить все, что клиент отправляет на сервер.

Например, если клиент отправляет «Hello World», то «Hello World» появляется на стороне сервера, но только отображает его. Я хочу иметь возможность хранить эту полученную строку в некоторой переменной.

Скажем.... string str, тогда, если я напечатаю str, то он напечатает "Hello World".

Может ли кто-нибудь сказать мне, как это сделать?

import time
import BaseHTTPServer


HOST_NAME = '127.0.0.1' # !!!REMEMBER TO CHANGE THIS!!!
PORT_NUMBER = 8868 # Maybe set this to 9000.


class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_HEAD(s):
        s.send_response(200)
    def do_GET(s):
        """Respond to a GET request."""
        s.send_response(200)

if __name__ == '__main__':
    server_class = BaseHTTPServer.HTTPServer
    httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
    print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        pass
    httpd.server_close()
    print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)

Всякий раз, когда я запускаю этот сервер и нажимаю кнопку, чтобы отправить материал на этот сервер, сервер отображает следующее.

Thu Oct 15 10:14:48 2015 Server Starts - 127.0.0.1:8882
127.0.0.1 - - [15/Oct/2015 10:14:52] "GET id=497&message=A%20typed%27char*%27 HTTP/1.1" 200 -

И я хочу иметь возможность хранить этот GET id=497 blah blah в переменной внутри функции в виде строки.


person Toshihiro M Sakurai    schedule 15.10.2015    source источник
comment
возможный дубликат: stackoverflow.com/questions/4233218/   -  person alexanderlukanin13    schedule 15.10.2015


Ответы (1)


  • То, что вы видите в консоли, — это просто журналы, которые сервер печатает с помощью модуля ведения журнала.

  • параметр s в ваших методах вводит в заблуждение. использовать «я»

  • информация запроса хранится как атрибуты MyHandler.

Пример:

def do_HEAD(self):
    self.send_response(200)
def do_GET(self):
    """Respond to a GET request."""
    print('client', self.client_address)
    print('server', self.server)
    self.send_response(200)

См.: https://docs.python.org/2/library/basehttpserver.html

person Stephane Martin    schedule 16.10.2015
comment
Значит, нельзя хранить логи в какой-то переменной? Я попробовал вашу команду, но она отображает только ("сервер", экземпляр ‹BaseHTTPServer.HTTPServer по адресу 0x7sda7a8da7›). Это не то, чего я хочу. Я хочу иметь возможность хранить журналы?? в какой-то переменной. - person Toshihiro M Sakurai; 16.10.2015
comment
Как видно из моего вопроса, я хочу иметь возможность хранить 127.0.0.1 - - [15 октября 2015 г. 10:14:52] GET id=497&message=A%20typed%27char*%27 HTTP/1.1 200 - в какой-то переменной. Это возможно? - person Toshihiro M Sakurai; 16.10.2015
comment
Конечно, вы можете хранить любую доступную информацию в объекте 'self'. Просто напишите blabla = self.attribute вместо print. Пожалуйста, прочитайте связанную документацию, чтобы получить список доступных атрибутов. - person Stephane Martin; 16.10.2015