Я хочу получить ответ GET-запроса в строку, и я придумал следующий код:
import socket
target_host = "www.google.com"
target_port = 80 # create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# connect the client
s.connect((target_host, target_port))
# send some data
request = "GET / HTTP/1.1\r\nHost:%s\r\n\r\n" % target_host
s.send(request.encode("utf-8"))
full_msg = ""
# Prevent recv() function to stop the script to wait until it receives more data, even if there is no more.
s.settimeout(1)
flag = True
while flag:
# receive some data
try:
response = s.recv(4096)
full_msg = full_msg + str(response)
print("Adding msg")
except Exception as e:
print(full_msg)
flag = False
print(e)
print("Loop ended")
print(type(full_msg))
Дело в том, что когда я пытаюсь декодировать ответ в s.recv (4096), заменяя его следующим кодом:
response = s.recv(4096).decode("utf-8")
Я получаю следующее исключение:
'utf-8' codec can't decode byte 0xe8 in position 1025: invalid continuation byte
Я не знаю, как это исправить, так как не могу изменить символы, полученные из ответ и мне нужно удалить символ "b", который портит мою строку full_msg, если я не декодирую ее каждый раз в l oop.
Кроме того, в документах говорится, что .recv ( ) метод возвращает строку, но мне кажется, что я получаю байтовоподобный объект. Любая идея приветствуется, и я также открыт, чтобы узнать, как можно улучшить мой код.