Python网络编程—TCP套接字之HTTP传输

Posted maplethefox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python网络编程—TCP套接字之HTTP传输相关的知识,希望对你有一定的参考价值。

HTTP协议 (超文本传输协议)

 

1.用途 : 网页获取,数据的传输

 

 

2.特点:

 

  • 应用层协议,传输层使用tcp传输
  • 简单,灵活,很多语言都有HTTP专门接口
  • 无状态,协议不记录传输内容
  • http1.1 支持持久连接,丰富了请求类型

3.网页请求过程

  1. 客户端(浏览器)通过tcp传输,发送http请求给服务端
  2. 服务端接收到http请求后进行解析
  3. 服务端处理请求内容,组织响应内容
  4. 服务端将响应内容以http响应格式发送给浏览器
  5. 浏览器接收到响应内容,解析展示

技术图片

HTTP请求(request)

1.请求行 : 具体的请求类别和请求内容

  • GET / HTTP/1.1
  • 请求类别 请求内容 协议版本

请求类别:每个请求类别表示要做不同的事情

  • GET : 获取网络资源
  • POST :提交一定的信息,得到反馈
  • HEAD : 只获取网络资源的响应头
  • PUT : 更新服务器资源
  • DELETE : 删除服务器资源
  • CONNECT
  • TRACE : 测试
  • OPTIONS : 获取服务器性能信息

2.请求头:对请求的进一步解释和描述

  • Accept-Encoding: gzip

3.空行

4.请求体: 请求参数或者提交内容

技术图片
 1 from socket import *
 2 
 3 s = socket()
 4 s.bind((0.0.0.0,8001))
 5 s.listen(3)
 6 c,addr = s.accept()
 7 print("Connect from",addr)
 8 data = c.recv(4096)
 9 print(data)
10 
11 data = """HTTP/1.1 200 OK
12 Content-Type:text/html
13 
14 <h1>Hello world</h1>
15 """
16 c.send(data.encode())
17 
18 c.close()
19 s.close()
http 请求响应示例

http响应(response)

响应格式:响应行,响应头,空行,响应体

响应行 : 反馈基本的响应情况

  • HTTP/1.1 200 OK
  • 版本信息 响应码 附加信息

响应码 :

  • 1xx 提示信息,表示请求被接收
  • 2xx 响应成功
  • 3xx 响应需要进一步操作,重定向
  • 4xx 客户端错误
  • 5xx 服务器错误

响应头:对响应内容的描述

  • Content-Type: text/html

响应体:响应的主体内容信息

技术图片
 1 from socket import *
 2 
 3 # 处理客户端请求
 4 def handle(connfd):
 5   request = connfd.recv(4096) # 接收请求
 6   # 防止客户端断开request为空
 7   if not request:
 8     return
 9   request_line = request.splitlines()[0]
10   info = request_line.decode().split( )[1]
11   if info == /:
12     with open(index.html) as f:
13       response = "HTTP/1.1 200 OK\\r\\n"
14       response += "Content-Type:text/html\\r\\n"
15       response += \\r\\n
16       response += f.read()
17   else:
18     response = "HTTP/1.1 404 Not Found\\r\\n"
19     response += "Content-Type:text/html\\r\\n"
20     response += \\r\\n
21     response += "<h1>Sorry...</h1>"
22   # 发送给浏览器
23   connfd.send(response.encode())
24 
25 
26 # 搭建tcp网络
27 sockfd = socket()
28 sockfd.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
29 sockfd.bind((0.0.0.0,8000))
30 sockfd.listen(3)
31 while True:
32   connfd,addr = sockfd.accept()
33   handle(connfd)  # 处理客户端请求
http 发送网页给浏览器

 

以上是关于Python网络编程—TCP套接字之HTTP传输的主要内容,如果未能解决你的问题,请参考以下文章

Python网络编程之TCP 客户端程序开发

Python网络编程之TCP服务端程序开发

HTTP 之 套接字

Python网络编程—socket套接字编程(TCP)

socket套接字编程 HTTP协议

Python网络编程—(TCPUDP区别)