如何使用基于TCP的HTTP在python中下载图像?

时间:2018-12-18 07:11:06

标签: python python-3.x sockets

如何使用基于TCP的HTTP在python中下载图像?我确实下载了映像,但是它说无法打开该文件(这可能意味着并非所有字节都已被接收或写入)。我的任务是使用套接字库,没有urlib或请求。 任何帮助表示赞赏。

from kafka.client import KafkaClient

2 个答案:

答案 0 :(得分:1)

尝试一下...

import socket
import select

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('google.com', 80))
s.sendall(b'GET /favicon.ico HTTP/1.0\r\n\r\n')

reply = b''

while select.select([s], [], [], 3)[0]:
    data = s.recv(2048)
    if not data: break
    reply += data

headers =  reply.split(b'\r\n\r\n')[0]
image = reply[len(headers)+4:]

# save image
f = open('google.ico', 'wb')
f.write(image)
f.close()

答案 1 :(得分:0)

您不是通过在字符串的开头添加'b'来创建字节对象。您正在将Python的表示形式与实际内容混合在一起。

b'bytes'

bytes的序列,其中确保每个元素都是与字符的ASCII码相对应的单个8位字节。

'b' + 'bytes'

是Unicode字符串,其中的每个元素不能保证是一个字节,而是一个Python字符。等同于

'bbytes'

或(实际上是明确的)

u'bbytes'

bu前缀是向Python解释器发送的信号,指示应如何存储序列,而不是值的一部分。

要将字符串转换为bytes对象,请调用字符串的encode方法。

output1 = b'bytes'.encode('us-ascii')