Есть сервер, принимающий get запросы. Для удобства делаю get запросы через браузер. как "
http://localhost:8080/Максим" - вместо кириллицы получается белиберда.
Вот код
import os
import socket
import time
#метод ответа на запрос, где data = ответ клиенту
def send_answer(conn, status="200 OK", typ="text/plain; charset=utf-8", data=""):
data = data.encode("utf-8")
conn.send(b"HTTP/1.1 " + status.encode("utf-8") + b"\r\n")
conn.send(b"Server: simplehttp\r\n")
conn.send(b"Connection: close\r\n")
conn.send(b"Content-Type: " + typ.encode("utf-8") + b"\r\n")
conn.send(b"Content-Length: " + bytes(len(data)) + b"\r\n")
conn.send(b"\r\n")
conn.send(data)
#обработка get-Запроса. принимает подключение и адрес
def get_on(conn, addr):
data = b""
while not b"\r\n" in data:
tmp = conn.recv(1024)
if not tmp:
break
else:
data += tmp
if not data:
return
udata = data.decode("utf-8") #уже пробовал менять кодировки здесь !!! не помогает
udata = udata.split("\r\n", 1)[0]
method, addres, protocol = udata.split(" ", 2) #method - тип запроса; addres - параметры запроса (/web/cgi-1.html); protocol - http.1.1 ;
if method == "GET":
print(addres) # !!!!!!!!!!! В ЭТОМ МЕСТЕ ВМЕСТО /Максим - выводиться белиберда. Как поменять кодировку на нужную?
send_answer(conn, typ="text/html; charset=utf-8", data=str("otver_cliente"))
return
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", 8080))#установка Ip(не задано) и порта приема сервера
s.listen(5)
try:
while 1:
conn, addr = s.accept()
print("New connection from " + addr[0])
try:
get_on(conn, addr)
except:
send_answer(conn, "500 Internal Server Error", data="Ошибка")
finally:
conn.close()
finally: s.close()