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

标签 python python-3.x sockets

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

serverPort = 80
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect(('google.com', serverPort))
print("ready to receive!")

output = 'GET  http://google.com/favicon.ico HTTP/1.0\r\nHOST: google.com\r\n\r\n'
print(output)
output1 = ('b' + output)
clientSocket.sendall(output1.encode())
reply = b''

while True:
    data = clientSocket.recv(1024)
    if not data:
        break
    reply += data

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

f = open('image_test.ico', 'wb')
f.write(image)
f.close()

clientSocket.close()

最佳答案

试试这个...

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()

关于python - 如何在python中使用基于TCP的HTTP下载图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53827966/

相关文章:

python - 如何在C++ Builder 2010(非Delphi)应用程序中嵌入Python?

php - 从 PHP 运行 Python3 代码

python - 捕获异步流服务器中的异常

python - django.core.exceptions.AppRegistryNotReady : Apps aren't loaded yet launching debug on pycharm

Python ssl 获取支持的密码

c - 无法通过同一网络连接到不同机器上的套接字

python - 将 Keras 模型导出到 .pb 文件并优化推理在 Android 上给出随机猜测

python - 在训练期间固定神经网络中的一部分权重

java - netty 4 中的超时事件

python - 如何用另一个分类变量列表替换不同的分类变量