Python 使用请求抓取图像并使用base64编码,但标头不正确

Python 使用请求抓取图像并使用base64编码,但标头不正确,python,image,python-requests,Python,Image,Python Requests,我正在编写代码从URL下载一个图像,然后在base64中对该图像进行编码。守则的有关章节如下: dlimage = requests.request("GET", imageURL) encodedImage = ("data:" + dlimage.headers['Content-Type'] + ";" + "base64," + base64.encodestring(dlimage.content)) 结果是: data:text/html;base64,PGh0bWw+DQo8aG

我正在编写代码从URL下载一个图像,然后在base64中对该图像进行编码。守则的有关章节如下:

dlimage = requests.request("GET", imageURL)
encodedImage = ("data:" + dlimage.headers['Content-Type'] + ";" + "base64," + base64.encodestring(dlimage.content))
结果是:

data:text/html;base64,PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAzIEZvcmJpZGRlbjwvdGl0bGU+PC9oZWFkPg0KPGJvZHkgYmdjb2xvcj0id2hpdGUiPg0KPGNlbnRlcj48aDE+NDAzIEZvcmJpZGRlbjwvaDE+PC9jZW50ZXI+DQo8aHI+PGNlbnRlcj5uZ2lueDwvY2VudGVyPg0KPC9ib2R5Pg0KPC9odG1sPg0K
所讨论的图像是JPEG。那么为什么标题是text/html呢?我使用另一个工具转换了图像,字符串完全不同。

该文件不是JPEG文件

A以字节0xFF、0xD8、0xFF开头。在使用Python 3.6的IPython中变为/9j/example的base64编码中:

In [1]: start = b'\xff\xd8\xff'

In [2]: base64.b64encode(start).decode('ascii')
Out[2]: '/9j/'
由于base64编码字符串的开头不同,因此它不是JPEG文件

解码内容:

In [3]: base64.b64decode('PGh0bWw+DQo8aGVhZD48dGl0bGU+NDAzIEZvcmJpZGRlbjwvdGl0bGU+PC9oZWFkPg0KPGJvZHkgYm
    ...: djb2xvcj0id2hpdGUiPg0KPGNlbnRlcj48aDE+NDAzIEZvcmJpZGRlbjwvaDE+PC9jZW50ZXI+DQo8aHI+PGNlbnRlcj5uZ2
    ...: lueDwvY2VudGVyPg0KPC9ib2R5Pg0KPC9odG1sPg0K')
Out[3]: b'<html>\r\n<head><title>403 Forbidden</title></head>\r\n<body bgcolor="white">\r\n<center><h1>403 Forbidden</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n'

您无权访问图像…

此:dlimage.headers['Content-Type']的值是多少?看起来该标题的值是text/html。与其访问该数组以获取标题,不如直接硬编码所需内容,因为它始终是一个图像。因此,您应该使用image/jpeg而不是dlimage.headers['Content-Type'],因为有时下载的图像会是PNG或GIF,所以您不能硬编码image/jpeg。然后,该头部会出现问题。服务器未正确设置它。您有权访问服务器端代码吗?