Веб-сервери (обработка данных)

Например, когда ввожу hello world, получаю hello%2c world. Что нужно исправить в коде, чтобы выводились только нужные слова? Подскажите, пожалуйста

import http.server
import socketserver

class UniqueWordHandler(http.server.SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_header('Access-Control-Allow-Origin', 'http://localhost:8001/')
        self.send_header('Access-Control-Allow-Methods', 'POST, OPTIONS')
        self.send_header('Access-Control-Allow-Headers', 'Content-Type')
        super().end_headers()
    def do_OPTIONS(self):
        self.send_response(200)
        self.end_headers()
    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length).decode('utf-8')
        text = post_data.split('=')[1].replace('+', ' ')
        text = text.lower().split()
        unique_words = []
        for word in text:
            if word not in unique_words:
                unique_words.append(word)
        response_text = ' '.join(unique_words)
        self.send_response(200)
        self.send_header('Content-Type', 'text/plain')
        self.end_headers()
        self.wfile.write(response_text.encode())
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        html_page = """
        <!DOCTYPE html>
        <html>
        <head>
        <title>Unique Word Server Page</title>
        </head>
        <body>
        <h1>Unique Word Handler</h1>
       <form method="post">
                <input type="text" name="text" class="uniquewords" placeholder="Enter the text">
                <input type="submit" value="Check Unique Words">
     </form>
        </body>
        </html>
        """
        self.wfile.write(html_page.encode('utf-8')

PORT = 8001
with socketserver.TCPServer(("", PORT), UniqueWordHandler) as httpd:
    print("Serving at port", PORT)
    httpd.serve_forever()

Ответы (2 шт):

Автор решения: insolor

Используйте функцию unquote из стандартного модуля urllib.parse

from urllib.parse import unquote
text = "hello%2c world"
print(unquote(text))  # Вывод: hello, world
→ Ссылка
Автор решения: CrazyElf

Чтож, я даже не поленился и запустил этот скрипт у себя. Сначала получил ошибку, что отсутствует парная скобка в строке:

self.wfile.write(html_page.encode('utf-8')

Добавил скобку, ввёл hello world - и получил на выходе тоже hello world. В общем, как минимум, вы запускаете не тот код, который показываете, и вводите не то, что написали в вопросе.

А дальше да, используйте unquote, как написано в другом ответе, и выкидывайте знаки препинания, это можно сделать разными способами - либо "вручную", либо поиском буквенных слов через регулярные выражения.

→ Ссылка