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

时间:2017-03-06 18:19:25

标签: 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+DQo8aGVhZD48dGl0bGU+NDAzIEZvcmJpZGRlbjwvdGl0bGU+PC9oZWFkPg0KPGJvZHkgYmdjb2xvcj0id2hpdGUiPg0KPGNlbnRlcj48aDE+NDAzIEZvcmJpZGRlbjwvaDE+PC9jZW50ZXI+DQo8aHI+PGNlbnRlcj5uZ2lueDwvY2VudGVyPg0KPC9ib2R5Pg0KPC9odG1sPg0K

相关图片为JPEG。那么为什么标题会说text/html?我使用其他工具转换图像,字符串完全不同。

1 个答案:

答案 0 :(得分:1)

该文件是一个JPEG文件。

JPEG file以字节0xFF,0xD8,0xFF开头。在变为/9j/的base64编码中(使用Python 3.6的IPython中的示例):

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'

您无法访问该图片...