Python网络编程—TCP套接字之HTTP传输
HTTP协议 (超文本传输协议)
1.用途 : 网页获取,数据的传输
2.特点:
- 应用层协议,传输层使用tcp传输
- 简单,灵活,很多语言都有HTTP专门接口
- 无状态,协议不记录传输内容
- http1.1 支持持久连接,丰富了请求类型
3.网页请求过程
- 客户端(浏览器)通过tcp传输,发送http请求给服务端
- 服务端接收到http请求后进行解析
- 服务端处理请求内容,组织响应内容
- 服务端将响应内容以http响应格式发送给浏览器
- 浏览器接收到响应内容,解析展示
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 发送网页给浏览器
转载于:https://www.cnblogs.com/maplethefox/p/10989040.html
Python网络编程—TCP套接字之HTTP传输相关推荐
- Python网络编程——socket套接字实现UDP/TCP信息传输
socket套接字 socket(简称 套接字) ,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来 ...
- python socket清空接收缓冲区_Python网络编程——修改套接字发送和接收的缓冲区大小...
很多情况下,默认的套接字缓冲区大小可能不够用.此时,可以将默认的套接字缓冲区大小改成一个更合适的值. 1. 代码 # ! /usr/bin/env python # -*- coding: utf-8 ...
- [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 ...
- TCP/IP网络编程:P1->理解网络编程和套接字
本系列文章为<TCP/IP网络编程----尹圣雨>学习笔记 文章目录 一.理解网络编程和套接字 1.1 构建接电话套接字 1.2 编写"Hello world!"服务器 ...
- TCP/IP网络编程——理解网络编程和套接字编程
完整版文章请参考: TCP/IP网络编程完整版文章 文章目录 一.理解网络编程和套接字编程 1.1 socket套接字 1.1.1 一个例子来表示TCP的网络连接 1.1.2 程序实现 1.2 文件操 ...
- Python网络编程——TCP与UDP
Python网络编程 TCP(复杂可靠)与UDP(简单不可靠)的区别 1) TCP提供面向连接的传输,通信前要先建立连接(三次握手机制): UDP提供无连接的传输,通信前不需要建立连接. 2) TCP ...
- Linux原始网络编程,Linux操作系统网络编程 原始套接字 (1)
Linux操作系统网络编程--原始套接字 (1) http://soft.zdnet.com.cn/software_zone/2007/1020/568223.shtml 我们在前面已经学习过了网络 ...
- C# 网络编程之套接字编程基础知识
最近阅读了周存杰编写的<C#网络编程实例教程>并阅读了很多相关方面的资料,同时自己也做了一些套接字编程方面的C#程序,所以根据它的知识总结了最近的套接字编程的一些知识点,方便自己的理解与他 ...
- Linux网络编程之套接字基础
Linux网络编程之套接字基础 1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_ ...
最新文章
- 疯狂ios讲义之网页控件(UIWebView)
- Linux网络编程——连接和面向连接的协议之间没有区别
- Java关键字final使用详解
- iOS项目架构 小谈
- .NET Core开发实战(第28课:工作单元模式(UnitOfWork):管理好你的事务)--学习笔记...
- oracle数据库存储ip地址,oracle – 以十进制形式存储的IP地址 – PL / SQL以虚线四边形显示...
- PageObjects 设计模式
- 凑热闹买了个小米剃须刀
- Docker安装ElasticSearch 版本7.6.2
- 在圣诞节读一本书 | 读书
- 教师-学生网络下Self-Ensembing with GAN-based Data Augmentation for Domain Adaption in Sematic Segmentation
- 针对于网站被黑被劫持了的解决办法、网站被劫持了怎么办
- keil5库文件安装失败_iPad iPhone如何清理垃圾 iPad iPhone清理垃圾文件办法【详解】...
- 「中国好SaaS」重装升级,真正以用户视角,发现SaaS好项目
- office在线预览 word在线预览 .net在线预览 文件在线浏览接口
- AjaxPro的AJAX示例
- 《超新星纪元》阅读笔记
- 19、会员中心 - 小程序端开发 - 微擎小程序模块应用开发
- MATLAB中cftool使用
- UI设计教程分享:6个不能错过的UI设计网站
热门文章
- 27-----BBS论坛
- 编写代码约定,每行字符长度不超过80列
- 牛客练习赛24题解(搜索,DP)
- js javascript变量提升
- 【逆向知识】裸函数(Naked函数)
- 建立自己的git账户并保存资料的重要性
- day36 03-Hibernate检索方式:排序、参数绑定、投影查询
- Maximum Subarray with Sum/ Multiply
- Ubuntu14.04 桌面 launcher 终端 状态栏 失效解决
- 用Android自带的signapk.jar + .x509.pem + .pk8签名应用程序