Python HTTPServer — получить тело HTTP

Я написал HTTP-сервер с использованием Python, но не знаю, как получить тело HTTP. что мне делать, чтобы получить тело HTTP?

вот мой код:

from http.server import HTTPServer,BaseHTTPRequestHandler

class MyHTTPHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        print("connect from ",self.client_address)
        print(self.headers)
        length = self.headers['Content-Length']
        print(length)

addr = ('',21567)
server = HTTPServer(addr,MyHTTPHandler)
server.serve_forever()

person Enrico's Ricardo    schedule 19.07.2016    source источник
comment
Хм. Вы можете попробовать Flask...   -  person OneCricketeer    schedule 19.07.2016
comment
В любом случае. Я чувствую, что вы должны писать HTML для какого-то объекта Response   -  person OneCricketeer    schedule 19.07.2016
comment
Возможный дубликат Запись тела ответа с помощью BaseHTTPRequestHandler   -  person OneCricketeer    schedule 19.07.2016
comment
В запросе GET нет тела HTTP...!?   -  person deceze♦    schedule 19.07.2016
comment
Хорошо, я ошибаюсь, это очень смущает   -  person Enrico's Ricardo    schedule 19.07.2016
comment
@deceze Вы можете, но... https://stackoverflow.com/questions/978061/http-get-with-request-body   -  person LiGhTx117    schedule 19.07.2016
comment
@LiGhTx117 Ну да, технически вы можете отправлять любой мусор, который хотите...   -  person deceze♦    schedule 19.07.2016
comment
Сервер должен закрыть соединение, если приходит мусор. Если HTTP/1.1 и keep-alive, то может быть отправлен только следующий запрос метода, и только метод POST может содержать данные после заголовка. Допущение мусора может привести к DoS-атакам.   -  person Dalen    schedule 19.07.2016


Ответы (1)


Наличие тела запроса в запросе GET не является хорошей практикой, как это обсуждается здесь: HTTP GET с тело запроса

Вместо этого вы можете сменить метод на POST и проверить там BaseHTTPRequestHandler документацию: https://docs.python.org/2/library/basehttpserver.html

Особенно эта часть:

файл

Содержит входной поток, расположенный в начале необязательных входных данных.

person LiGhTx117    schedule 19.07.2016
comment
Я пробовал так много раз, self.rfile.read(int(self.headers['Content-Length'])) ничего не возвращает - person Enrico's Ricardo; 19.07.2016
comment
Что вы используете для тестирования своей программы (curl, веб-браузер и т. д.)? - person LiGhTx117; 19.07.2016
comment
Я решил это, я изменил метод на POST, и это, наконец, сработало! - person Enrico's Ricardo; 19.07.2016
comment
@Enrico'sRicardo, не могли бы вы принять этот ответ как решение? - person white_gecko; 02.05.2020