Невозможно получить веб-данные с помощью программирования сокетов в Python - PullRequest
0 голосов
/ 02 ноября 2019

Невозможно получить веб-данные с помощью программирования сокетов в python:

import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('data.pr4e.org',80))

cmd = 'GET http://data.pr4e.org/intro-short.txt HTTP/1.1\r\n\r\n'.encode()
mysock.send(cmd)
while True:
    data = mysock.recv(100)
    if(len(data) < 1):
        break
    print(data.decode(),end='')
mysock.close()

Ошибка

HTTP / 1.1 400 Неправильный запрос

Дата: Сб, 02 Ноя 2019 08:41:58 GMT

Сервер: Apache / 2.4.18 (Ubuntu)

Длина содержимого: 308

Тип содержимого: текст/ HTML;charset = iso-8859-1

Через: HTTP / 1.1 forward.http.proxy: 3128

Соединение: закрыть

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.18 (Ubuntu) Server at do1.dr-chuck.com Port 80</address>
</body></html> 

1 Ответ

0 голосов
/ 02 ноября 2019

Это недопустимый запрос HTTP / 1.1. Он пропускает заголовок хоста, и должен быть задан только относительный путь, а не абсолютный:

  cmd = 'GET /intro-short.txt HTTP/1.1\r\nHost: data.pr4e.org\r\n\r\n'.encode()

Для получения дополнительной информации, пожалуйста, прочитайте стандарт HTTP и не просто догадайтесь, какHTTP выглядит так. Обратите внимание, что HTTP, вероятно, намного сложнее, чем вы думаете. Например: даже при правильном запросе эта программа зависнет после получения ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...