Читать данные HTTP-запроса в Python 3? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь написать базовый HTTP-сервер «эхо», который записывает необработанные данные, которые он получает в запросе.Как я могу получить данные запроса в виде строки?

Это моя программа:

#!/usr/bin/env python
from http.server import HTTPServer, BaseHTTPRequestHandler


class RequestHandler(BaseHTTPRequestHandler):
  def do_GET(self):
    print('data', self.rfile.readall())
    self.send_response(200)
    self.send_header('Content-Type', 'text/html')
    self.end_headers()
    message = 'Hello Client!'
    self.wfile.write(bytes(message, 'utf8'))
    return

def server_start():
  address = ('', 1992)
  httpd = HTTPServer(address, RequestHandler)
  httpd.serve_forever()


server_start()

Ошибка:

self.rfile.readall(): '_io.BufferedReader' object has no attribute 'readall'

1 Ответ

0 голосов
/ 09 февраля 2019

Если это запрос на получение, то не будет body, поэтому данные будут отправляться в url.

from http.server import HTTPServer, BaseHTTPRequestHandler
import urlparse

class RequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        parsed_path = urlparse.urlparse(self.path)
        print(parsed_path.query)
        ...

В противном случае вам следует реализовать POSTметод, если вы хотите отправить более сложный объект в виде данных (посмотрите на другие HTTP-методы , если вы не знакомы с ними). ​​

Метод post будет выглядеть примерно так:

def do_POST(self):
    post_body = self.rfile.readall()

Обратите внимание, что здесь вы можете использовать метод rfile.readall().Вот вам хороший гист с некоторыми примерами!

...