Как получить HTML-код с помощью Python-сокетов
Поэтому я пытаюсь получить исходный код Google, используя только сокеты Python, а не любые другие библиотеки, такие как urllib. Я не понимаю, почему мой запрос GET не работает, я перепробовал все возможные методы. Это код, который у меня есть, он довольно маленький, и я не хочу получать слишком много деталей. Просто ищу протокол, который используется для получения исходных кодов. Я предполагал, что это будет GET
метод, но он не работает. Мне нужен ответ, который напоминает urllib.request, но использует только сокеты Python.
- Если я передам " https://www.google.com/"
socket.gethostbyname()
, это терпит неудачу на getaddrinfo. - Также, когда я пытаюсь получить запрос от python.org, цикл while никогда не заканчивается.
import socket;
s=socket.socket();
host=socket.gethostbyname("www.google.com");
port=80;
send_buf="GET / \r\n"\
"Host: www.google.com\r\n";
s.connect((host, port));
s.sendall(bytes(send_buf, encoding="utf-8"));
data="";
part=None;
while( True ):
part=s.recv(2048);
data+=str(part, "utf-8");
if( part==b'' ):
break;
s.close();
1 ответ
Решение
Следующее работало для меня:
import socket
s=socket.socket()
host=socket.gethostbyname('www.google.com')
port=80
s.connect((host,port))
s.sendall("GET /\r\n")
val = s.recv(10000)
# Split off the HTTP headers
val = val.split('\r\n\r\n',1)[1]