В настоящее время я пытаюсь реализовать приложение "Получить веб-страницу из источника и сохранить ее как файлы в локальном каталоге", и у меня много проблем ...
Один из моих проблема в том, что я попытался связаться с Google с запросом GET, получить файл html и сохранить его в локальном каталоге. Вот мой полный код для этой части программы:
from socket import *
import sys
SN = "www.google.com"
SP = 80
Csocket = socket(AF_INET, SOCK_STREAM)
Csocket.connect((SN, SP))
Header = 'GET /' +""+ ' HTTP/1.1\r\n' + "Host: " + "www.google.com\r\n" + "Connection: close\r\n" +
"Accept-language: us-en\r\n" + "Cache-Control: public\r\n\r\n"
Csocket.send(Header.encode())
result = Csocket.recv(999999) .decode('UTF-8')#.split("\r\n\r\n", 1)[1]
fn = "Google"+".html"
file = open(fn, 'a')
file.write(result)
print(result)
Вроде все работает, я получаю ответ 200 OK html. но когда я пытаюсь декодировать ответ с сервера Google с помощью функции .decode()
, я получаю сообщение об ошибке:
Traceback (most recent call last):
File "C:/Users/artha/PycharmProjects/WEEEB/venv/Client.py", line 11, in <module>
result = Csocket.recv(999999) .decode('UTF-8').split("\r\n\r\n", 1)[1]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa0 in position 45407: invalid start byte
Затем я переключаюсь на .decode(utf-16)
, и это была та же самая история
UnicodeDecodeError: 'utf-16-le' codec can't decode byte 0x3e in position 47770: truncated data
Честно говоря, я понятия не имею, что здесь происходит, пожалуйста, помогите мне! Спасибо.
Кстати, кто-нибудь знает, как установить размер буфера "dynamici c" socket.recv()
? есть большой сайт и есть маленький сайт. Поэтому я вынужден установить очень большой размер буфера, чтобы ничего не пропустить. Может кто-нибудь сказать, пожалуйста, как я могу позволить программе настроить размер буфера, чтобы соответствовать входящим данным? большое спасибо!