如何使用基于TCP的HTTP在python中下载图像?我确实下载了映像,但是它说无法打开该文件(这可能意味着并非所有字节都已被接收或写入)。我的任务是使用套接字库,没有urlib或请求。 任何帮助表示赞赏。
from kafka.client import KafkaClient
答案 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'
b
或u
前缀是向Python解释器发送的信号,指示应如何存储序列,而不是值的一部分。
要将字符串转换为bytes
对象,请调用字符串的encode
方法。
output1 = b'bytes'.encode('us-ascii')