使用Python通过套接字(端口80)连接基本访问Web数据(html)

时间:2019-03-21 07:18:20

标签: python sockets networking

我的问题是理论性的:我们可以使用 urllib库(urlopen)返回html页面;我了解data = mysock.recv(512)的行为与接收到的数据(UTF-8或ASCII)的document.read()相同。

下面几行中的哪些代码可用作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 个答案:

答案 0 :(得分:1)

经过仔细研究,正确的答案是:mysock.connect(('data.pr4e.org', 80))的行为与open('romeo.txt')类似;尽管它只能通过端口80连接到主机域,并且open()有所不同,因为它在定义的位置定位了'romeo.txt'的存在。

答案 1 :(得分:0)

您正确的是,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中,是C语言GET方法的示例实现:

  

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,导致服务器搜索文件/检查文件是否存在