Веб-сервери (обработка данных)
Например, когда ввожу 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 шт):
Используйте функцию unquote
из стандартного модуля urllib.parse
from urllib.parse import unquote
text = "hello%2c world"
print(unquote(text)) # Вывод: hello, world
Чтож, я даже не поленился и запустил этот скрипт у себя. Сначала получил ошибку, что отсутствует парная скобка в строке:
self.wfile.write(html_page.encode('utf-8')
Добавил скобку, ввёл hello world
- и получил на выходе тоже hello world
. В общем, как минимум, вы запускаете не тот код, который показываете, и вводите не то, что написали в вопросе.
А дальше да, используйте unquote
, как написано в другом ответе, и выкидывайте знаки препинания, это можно сделать разными способами - либо "вручную", либо поиском буквенных слов через регулярные выражения.