为什么代码中有双\ r \ n而不是\ r \ n

时间:2017-08-07 00:04:57

标签: python image data-retrieval

PY4E的原始代码:

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/cover.jpg HTTP/1.0\n\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()

我的问题不多了:

  • picture=b''
  • 的含义是什么
  • pos是什么意思?
  • [pos+4:]picture=picture[pos+4:]的内容是什么?
  • 如何查看图像? 感谢您提前获得任何指导。

1 个答案:

答案 0 :(得分:0)

  

picture=b''

的意思是什么

这是将picture变量设置为空字节数组,稍后将添加该数组。

  

pos是什么?

pos = picture.find(b"\r\n\r\n")中,代码正在查找图片数据之前的HTTP标头的末尾。

  

[pos+4:]picture=picture[pos+4:]的内容是什么?

上面的评论解释了它,它“跳过标题”来获取图片数据。

  

如何查看图像?

在这两行中,

fhand = open("stuff.jpg", "wb")
fhand.write(picture)

图片保存到标题为stuff.jpg的文件中,您应该可以双击文件管理器将其打开。