gpt4 book ai didi

python - 通过http python发送图像

转载 作者:可可西里 更新时间:2023-11-01 16:08:52 26 4
gpt4 key购买 nike

我需要在不使用 HTTP 库的情况下构建一个 http 服务器。

我的服务器正在运行并且正在加载一个 html 页面,但是我的 <img src="..."/>标签未加载,我接到电话但无法在页面中预设 png/JPEG。

http服务器.py
# Define socket host and port
SERVER_HOST = '0.0.0.0'
SERVER_PORT = 8000

# Create socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((SERVER_HOST, SERVER_PORT))
server_socket.listen(1)
print('Listening on port %s ...' % SERVER_PORT)

while True:
# Wait for client connections
client_connection, client_address = server_socket.accept()

# Handle client request
request = client_connection.recv(1024).decode()
content = handle_request(request)

# Send HTTP response
if content:
response = 'HTTP/1.1 200 OK\n\n'
response += content
else:
response = 'HTTP/1.1 404 NOT FOUND\n\nFile Not Found'

client_connection.sendall(response.encode())
client_connection.close()

# Close socket
server_socket.close()

处理调用的函数

 def handle_request(request):
http = HttpHandler.HTTPHandler

# Parse headers
print(request)
headers = request.split('\n')
get_content = headers[0].split()

accept = headers[6].split()
type_content = accept[1].split('/')

try:
# Filename
filename = get_content[1]

if get_content[0] == "GET":
content = http.get(None, get_content[1], type_content[0])


return content
except FileNotFoundError:
return None

处理http动词的类

class HTTPHandler:

def get(self, args, type):
if args == '/':
args = '/index.html'
fin = open('htdocs' + args)
if type != "image":
fin = open('htdocs/' + args)

if type == "image":
fin = open('htdocs/' + args, 'rb')

# Read file contents
content = fin.read()
fin.close()
return content

请注意,我正在尝试制作一个 HTTP 1.1,如果您发现任何不正常的模式,请提前表示感谢。

最佳答案

我不知道您从哪里了解到 HTTP 是如何工作的,但我敢肯定您没有学习 the actual standard在实现协议(protocol)时你应该这样做。关于您的实现的一些注意事项:

  • 行尾应该是 \r\n 而不是 \n。对于来自服务器的响应和来自客户端的请求都是如此。
  • 您假设客户端请求永远不会超过 1024 字节,并且可以在单个 recv 中读取。但是,请求可以有任意长度,并且不能保证您在单个 recv 中获得所有请求(TCP 是一种流协议(protocol),而不是消息协议(protocol))。
  • 虽然可以在正文之后简单地关闭 TCP 连接,但最好将正文的长度包含在 Content-length header 中或使用分块传输编码。<
  • 内容的类型应使用Content-Type header 给出,即 Content-type: text/html HTML 和 Content-type : image/jpeg 用于 JPEG 图片。没有这个浏览器可能会正确或错误地猜测类型可能是什么,或者根据上下文也可能坚持正确的内容类型 header 。

除此之外,如果您调试此类问题,找出客户端和服务器之间实际交换的内容会很有帮助。可能是您自己检查过,但没有将此类信息包含在您的问题中。您唯一的错误描述是“...我接到了电话,但无法在页面中预设 png/JPEG”,然后是您的代码转储。

关于python - 通过http python发送图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50430865/

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