gpt4 book ai didi

python-3.x - 如何在 python3 中通过 http 传输二进制文件?

转载 作者:可可西里 更新时间:2023-11-01 17:05:30 31 4
gpt4 key购买 nike

我搜索了很多,但没有找到有用的东西。
在我的例子中,我想用 python3 编写一个网络服务器,当然这必须处理二进制文件和文本文件。

sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockobj.bind(('localhost',8080))
sockobj.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sockobj.listen(1)
while True:
conn, address = sockobj.accept()
data = conn.recv(1024)
head, data = getPic()
conn.sendall(head + data) # Does not work at all
conn.close()

我查看了维基百科:https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

最佳答案

假设我们有一个名为 image.png 的 png 格式的图像,我们想通过 http 将其传输到客户端(例如 Webbrowser)。

import socket
def getPic():
filebuffer = ""
header = "HTTP/1.1 200 OK\r\nContent-type: image/png\r\n\r\n"
sfile = open("image.png", "rb")
filebuffer = sfile.read()
sfile.close()
return header, filebuffer
def main():
sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sockobj.bind(('localhost',8080))
sockobj.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sockobj.listen(1)
while True:
conn, address = sockobj.accept()
data = conn.recv(1024)
head, data = getPic()
if str(type(data)).find("str") > -1:
conn.sendall(bytes(head + data, "ASCII"))
#Since the most text files are in UTF-8 encoding, you can use the following instead:
#conn.sendall(bytes(head, "ASCII") + bytes(data, "UTF-8"))
else:
conn.sendall(bytes(head, "ASCII") + data)
conn.close()
main()


请注意从上面的代码中截取以下代码:

header = "HTTP/1.1 200 OK\r\nContent-type: image/png\r\n\r\n"
sfile = open("image.png", "rb")
filebuffer = sfile.read()
sfile.close()
return header, filebuffer

head, data = getPic()
if str(type(data)).find("str") > -1:
conn.sendall(bytes(head + data, "ASCII"))
else:
conn.sendall(bytes(head, "ASCII") + data)


为什么要检查响应主体是字符串还是字节?

没有它,如果我用上面的代码打开一个文本文件,我会得到一个错误。所以我决定将所有纯文本编码为 ASCII 字符集。

为什么http头是ASCII编码的?

因为它是在 W3C 规范中指定的

为什么return语句取两个值

这样做会清理代码,并且您不能将字符串与字节组合在一起,否则将无法正常工作。

如何告诉客户端我要发送png格式的图片?

W3C 有一个称为 MIME 类型的解决方案,这些是一组针对各种文件格式的预定义和可扩展值。例如。 image/png 告诉浏览器他得到一个 .png 格式的 image 文件。对于 javascript,它将是 application/javascript 等等

关于python-3.x - 如何在 python3 中通过 http 传输二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46770301/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com