Элементарный доступ к веб-данным (html) через сокет (порт 80) с использованием Python - PullRequest
1 голос
/ 21 марта 2019

Мой вопрос теоретический: мы можем использовать библиотеку urllib (urlopen) для возврата html-страницы; Я понимаю, что data = mysock.recv(512) ведет себя как document.read() для полученных данных (UTF-8 или ASCII).

Какой код в следующих строках работает как функция open('document')? open('document') находит указанный файл и проверяет, существует ли он, я предполагаю, что mysock.send(cmd) является эквивалентом, поскольку он отправляет GET-запрос веб-серверу для получения указанного файла с адреса.

import socket

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('data.pr4e.org', 80))
cmd = 'GET http://data.pr4e.org/romeo.txt HTTP/1.0\n\n'.encode()
mysock.send(cmd)

while True:
    data = mysock.recv(512)
    if (len(data) < 1):
        break
    print(data.decode())
mysock.close()

Редактировать: Я, кажется, нашел ответ, но более подробные рассуждения оставлены без внимания.

Ответы [ 2 ]

1 голос
/ 21 марта 2019

После тщательного изучения правильный ответ на этот вопрос: mysock.connect(('data.pr4e.org', 80)) ведет себя так же, как open('romeo.txt'); хотя он позволяет подключаться только к домену хоста через порт 80, и open() отличается тем, что определяет наличие 'romeo.txt' в определенном месте.

0 голосов
/ 21 марта 2019

Вы правы, что метод http GET ищет файл на сервере. В https://medium.com/from-the-scratch/http-server-what-do-you-need-to-know-to-build-a-simple-http-server-from-scratch-d1ef8945e4fa приведен пример реализации метода GET в C:

GET /info.html HTTP / 1.1

Итак, нам просто нужно найти файл info.html в текущем каталог (так как / указывает, что он ищет в корневом каталоге сервер. Если это похоже на /messages/info.html, то мы должны посмотреть внутри папки сообщений для файла info.html).

источник: https://medium.com/from-the-scratch/http-server-what-do-you-need-to-know-to-build-a-simple-http-server-from-scratch-d1ef8945e4fa

Реализация протокола http в Linux аналогична ...

Таким образом, mysock.send(cmd) похож на open(document), потому что с ним отправляется GET, который заставляет сервер искать файл / проверять, существует ли он

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