HTTP服务器中的图像和使用Python的HTML

HTTP服务器中的图像和使用Python的HTML,python,html,python-3.x,sockets,http,Python,Html,Python 3.x,Sockets,Http,我正在尝试用python创建一个HTTP服务器 所有都在工作,除非使用localhost:{port}在Google chrome或Microsoft Edge中未加载图像 代码如下: 导入套接字 导入时间 http\u head=“http/1.1 200正常\r\n” http_head+=“日期:”+time.asctime()+“GMT\r\n” http\u head+=“过期:-1\r\n” http\U head+=“缓存控制:专用,最大年龄=0\r\n” http_head+=

我正在尝试用python创建一个HTTP服务器

所有都在工作,除非使用localhost:{port}在Google chrome或Microsoft Edge中未加载图像

代码如下:

导入套接字
导入时间
http\u head=“http/1.1 200正常\r\n”
http_head+=“日期:”+time.asctime()+“GMT\r\n”
http\u head+=“过期:-1\r\n”
http\U head+=“缓存控制:专用,最大年龄=0\r\n”
http_head+=“内容类型:text/html;”
http\U head+=“字符集=utf-8\r\n”
http\U head+=“\r\n”
data=“”
数据+=“In321是最好的路线!(怀疑)”
数据+=“\r\n”
数据+=“”
数据+=“\r\n”
数据+=“\r\n”
http_响应=http_头.encode(“ascii”)+数据.encode(“utf-8”)
TCP_IP='127.0.0.1'
TCP_端口=55000
缓冲区大小=1024
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s、 绑定((TCP_-IP,TCP_-PORT))#在IP/PORT上的套接字上请求
s、 听(1)#将插座转换为插座断开连接
打印(“正在等待的客户端…”)
scom,caddr=s.accept()
打印(“与地址连接的客户端:”,caddr)
数据=scom.recv(缓冲区大小)
打印(“接收数据:”,数据解码('utf-8'))
发送(http\U响应)
s、 关闭()
scom.close()

问题在于,由于您使用的是字符串,浏览器在加载HTML内容后会尝试加载图像,但随后会注意到您试图读取本地文件,因此会阻止请求。(如果右键单击图像并单击“复制图像地址”,您可以看到它显示“关于:空白”#已阻止”)。您可以通过创建HTML文件或将图像作为字节嵌入字符串本身来避免这种情况。 你可以这样做

import base64
with open(path,"rb") as i:
    encoded_string = base64.b64encode(i.read()).decode( 'utf-8' )
并将以下内容添加到图像源中(其中
path
是图像的路径)

data+=f''

您也可以尝试使用python标准库中的模块,而不是使用套接字创建HTTP服务器。因此,我在我的代码中添加了
import base64 with open(“C:\\Users\\aliel\\OneDrive\\Documents\\GitHub\\TP2\u In321\\cry\u cat\u with_thumb\u up.jpg”,“rb”)作为I:encoded\u string=base64.b64encode(I.read())
,然后,我将
src=\“C:\\Users\\aliel\\OneDrive\\Documents\\GitHub\\TP2\u In321\\crying\u cat\u with\u thumb\u up.jpg\”
替换为
src=\“data:image/jpeg;base64;+encoded\u string\”
,但没有任何更改。我写的是/a,而不是/a。来,我来修。尝试改用这个:使用open(path,“rb”)作为i:encoded_string=base64.b64encode(i.read()).decode('utf-8')并添加数据+=f''Yes它正在工作!!非常感谢你!
data += f'<img src="data:image/png;base64, {encoded_string}">'