Python : HTTP响应 浏览器接收响应
一、HTTP协议
HTTP 协议主要用于网页获取和数据传输。HTTP 依赖于 TCP 进行数据传输。
在 HTTP 通信过程中,客户端(浏览器)通过 TCP 传输发送 HTTP 请求给服务端。服务端接收到请求后进行解析,并处理请求内容,组织响应内容。接着,服务端将响应内容以 HTTP 响应格式发送回浏览器。浏览器接收到响应内容后,会进行解析并展示给用户。
二、HTTP请求
请求行:包含请求方法、请求内容和HTTP版本
示例:GET /index.html HTTP/1.1
请求头部:包含请求的附加信息,每一行都是一个键值对。
示例:User-Agent: Mozilla/5.0
Accept: text/html
-
User-Agent:包含发出请求的浏览器或客户端软件的信息。
-
Accept:指定客户端能够处理的内容类型。它告诉服务器返回的资源类型。
-
Authorization:用于客户端身份验证,通常在需要认证的请求中使用。
-
Cookie:发送与请求相关的cookie信息。
-
Referer:指定当前请求的来源页面URL,通常用于追踪和分析页面跳转来源。
空行:在请求头部之后,用于分隔请求头部和请求体。
请求体:要发送的数据。
三、HTTP响应
状态行:包括HTTP版本、状态码和状态描述。
示例:HTTP/1.1 200 OK
-
状态码:请求的处理结果 eg: 200 表示成功,404 表示未找到,500 表示服务器错误等。
-
状态描述:对状态码的简短描述。
响应头部:包含服务器和响应的附加信息,每一行是一个键值对。
示例:Content-Type: text/html
Content-Length: 1234
-
Content-Type:指定响应体的媒体类型。它告诉客户端如何解释响应体的内容。
-
Content-Length:指定响应体的大小,以字节为单位。
-
Location:当响应状态码为重定向(如301、302)时,指示客户端应该请求的新的URL地址。
-
Set-Cookie:服务器设置的Cookie,客户端在后续请求中会带上这个Cookie。
空行:响应头部后是一个空行。
响应体:实际要传输的数据 ,可以是HTML、图片、文件等各种格式。
import socket
ADDR = ("127.0.0.1", 8022)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(ADDR)
server.listen(5)
# 等待浏览器连接
conn, addr = server.accept()
print("连接", addr)
request = conn.recv(1024)
print(request.decode("utf-8"))
# 组织响应
response = """HTTP/1.1 200 OK
Content-Type:text/html
hello K_K
"""
conn.send(response.encode("gbk"))
conn.close()
server.close()
图示效果:
升级一下:检索具体
import socket
ADDR = ('127.0.0.1', 8022)
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(ADDR)
server.listen(5)
while True:
conn, addr = server.accept()
print("连接", addr)
request = conn.recv(1024)
print(request.decode('utf-8'))
response = "HTTP/1.1 200 ok\r\n"
response += "content-type: text/html\r\n"
response += "\r\n"
# GET /lw HTTP/1.1
info_list = request.decode("utf-8").split('\r\n')[0]
info = info_list.split(' ')[1]
if info == "/K_K":
response += "你好 K_K"
elif info == "/Kl":
response += "来了"
elif info == "/":
response += "请问你是?"
else:
response += "不在"
conn.send(response.encode('gbk'))
conn.close()
server.close()
效果展示:
用函数升级思维 插入图片 用with阅读形式打开
import socket
ADDR = ('127.0.0.1', 8022)
def main():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(ADDR)
server.listen(5)
while True:
conn, addr = server.accept()
print("连接", addr)
handle(conn)
conn.close()
def handle(conn):
request = conn.recv(1024)
if not request:
return
print(request.decode('utf-8'))
response = "HTTP/1.1 200 ok\r\n"
response += "content-type: image/jpeg\r\n"
response += "\r\n"
with open(r'D:\py_project\pythonProject10\Study0912\4379.jpg_wh300.jpg', "rb") as file:
response = response.encode('utf-8') + file.read()
conn.send(response)
# GET /lw HTTP/1.1
conn.send(response.encode('gbk'))
conn.close()
if __name__ == '__main__':
main()
效果展示
注意:
1.浏览器是gbk模式
2.改变content-type可以传入任意形式
更多推荐








所有评论(0)