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

Python 为什么代码中有双\r\n而不是\r\n,python,image,data-retrieval,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""

来自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:]inpicture=picture[pos+4:]的作用是什么? 如何查看图像? 感谢您提前给予的指导。 picture=b的意思是什么

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

pos是做什么用的

在pos=picture.findb\r\n\r\n中,代码查找图片数据之前的HTTP头的结尾

图片中的[pos+4:]是做什么的

上面的注释解释了这一点,它跳过标题,只获取图片数据

如何查看图像

在这两行中,

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

图片保存到一个名为stuff.jpg的文件中,您应该能够双击文件管理器打开它。

这只是基本的HTTP解析。您是否从某个地方复制了此代码?如果你不理解它,在@cricket_007使用它可能不是一个好主意,它来自PY4E教程,我正在弄清楚代码的意思。代码中有一条注释,告诉你你的标题要求什么。你读过那个密码吗?如果代码来自一个教程,为什么你要来这里要求我们指导你关于教程的代码?在我看来,您应该重新阅读导致该代码的教程,因为您显然没有很好地理解它。您的问题表明您完全缺乏该语言的知识。你基本上是在不知道阿拉伯语字母的情况下读阿拉伯语的书。无论你的目标是什么,这都是一个非常糟糕的主意。我能知道[pos+4:]中的+4:in是什么吗?意思是?问题是stuff.jpg无法打开或查看。这个代码有什么问题吗?@ChristopherKnight是的,教程代码中有一个错误:在顶部附近,应该是:mysock.sendallb'GEThttp://data.pr4e.org/cover.jpg HTTP/1.0\r\n\r\n'。如果运行原始代码,您应该看到http服务器的“错误请求”响应。@robert_x44 pos=picture.findb\r\n\r\n是否与您刚才给出的命令相匹配?我可以通过打印查看python上的图片吗?或者是否有保存图像的默认路径?@ChristopherKnight这就是http规范的编写方式。您发送一个请求,其中一个\r\n结束于您发送的行,另一个\r\n空白行。在另一端,发送标头后,最后一个标头行以\r\n结尾,然后是一个\r\n空白行。搜索\r\n\r\n是一种查找空行的简单方法,它表示标题已完成,其余是您请求的数据。