我的问题是理论性的:我们可以使用 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()
编辑:我似乎已经找到了答案,但是还需要更全面的推理。
答案 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文件)。
http协议的linux实现类似...
因此mysock.send(cmd)
与open(document)
类似,因为发送了GET
,导致服务器搜索文件/检查文件是否存在