我是Python的新手,但我真的很想知道,这意味着什么。
在我的书中,我有一个代码:
for t in np.linspace(0,2*np.pi,100): plt.plot(np.cos(t), np.sin(t), 'k.')
响应为:
import socket
import time
HOST = 'data.pr4e.org'
PORT = 80
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect((HOST, PORT))
mysock.sendall(b'GET http://data.pr4e.org/cover3.jpg HTTP/1.0\r\n\r\n')
count = 0
picture = b""
while True:
data = mysock.recv(5120)
if len(data) < 1: break
#time.sleep(0.25)
count = count + len(data)
print(len(data), count)
picture = picture + data
mysock.close()
# Look for the end of the header (2 CRLF)
pos = picture.find(b"\r\n\r\n")
print('Header length', pos)
print(picture[:pos].decode())
# Skip past the header and save the picture data
picture = picture[pos+4:]
fhand = open("stuff.jpg", "wb")
fhand.write(picture)
fhand.close()
我想知道: -这些数字在回复开始时是什么意思? -谁能推荐一个来源来阅读有关获取假人图像的信息?
答案 0 :(得分:1)
它们是
的结果print(len(data), count)
分别到目前为止的数据长度和已接收的数据总数。
答案 1 :(得分:1)
由于通过计算机网络进行的数据传输会将数据分成数据包,因此您不会一次收到全部数据。因此,该代码正在执行的操作是接收“块”数据,打印出的是“块”的大小和接收到的数据总量(通过print(len(data), count)
行)。
一旦接收到所有数据,就可以提取图像数据。由于您正在使用HTTP,因此收到的数据将是HTTP响应。 HTTP响应由两部分组成:标头,标头是一系列键值对,它们提供有关响应本身的信息,并且是输出末尾要打印的内容。内容即数据,在您的情况下还包含图片。
在HTTP标头中,内容由两个行尾\r\n\r\n
分隔。因此picture.find(b"\r\n\r\n")
看起来是标题结束和内容(图像)开始的位置。
如果您需要做的只是使用HTTP检索图像,我建议您看看requests软件包。