1、

import socket

server = socket.socket()
server.bind(("127.0.0.1", 8800))
server.listen(5) while True:
print('server is waiting...')
conn, addr = server.accept()
data = conn.recv(1024)
print('data:', data)
# conn.send(b'hello luffycity')
conn.send(b'HTTP/1.1 200 OK\r\n\r\nhello luffycity') # 添加http响应头
conn.close()

2

  

import socket

server = socket.socket()
server.bind(("127.0.0.1", 8800))
server.listen(5) while True:
print('server is waiting...')
conn, addr = server.accept()
data = conn.recv(1024)
print('data:', data) # 读取html文件
with open('index.html', 'r') as f:
data = f.read() # 响应报头 + data
conn.send(('HTTP/1.1 200 OK\r\n\r\n%s' % data).encode('utf8'))
conn.close()

3.http请求协议

请求格式

get方式

GET / HTTP/1.1\r\n
Host: 127.0.0.1:8800\r\n
Connection: keep-alive\r\n
Pragma: no-cache\r\n
Cache-Control: no-cache\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n\r\n

请求首行\r\n
请求头\r\n
请求头\r\n
请求头\r\n
请求头\r\n
...\r\n\r\n

post方式

login.html 登录form表单

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:8800" method="post">
username: <input type="text" name="useranme">
password: <input type="password" name="password">
<input type="submit">
</form>
</body>
</html>

POST / HTTP/1.1\r\n
Host: 127.0.0.1:8800\r\n
Connection: keep-alive\r\n
Content-Length: 26\r\n
Pragma: no-cache\r\n
Cache-Control: no-cache\r\n
Origin: http://127.0.0.1:8800\r\n
Upgrade-Insecure-Requests: 1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Referer: http://127.0.0.1:8800/\r\n
Accept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n\r\n useranme=jack&password=2222'
请求首行\r\n
请求头\r\n
请求头\r\n
请求头\r\n
请求头\r\n
...\r\n\r\n 请求体(a=1&b=2) # 注意只有post请求才会有请求体

区别

3、响应协议

   # 响应格式 + data
conn.send(('HTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n%s' % data).encode('utf8'))

响应码状态

4

最新文章

  1. CSS命名格式
  2. linux命令每日一练习-top free
  3. python基础05 缩进与选择
  4. 【前端学习】git命令行界面
  5. exit(-1)或者return(-1)为什么shell得到的退出码是255?
  6. 【Java】Socket+多线程实现控制台聊天室
  7. JS中String,Math常用函数
  8. *++p和*p++的区别
  9. iOS9关键字的简单使用
  10. 你真的知道什么是【共享Session】,什么是【单点登录】吗?
  11. [C++]2-3 倒三角形
  12. css初识和css选择器
  13. 20155330 《网络对抗》 Exp8 Web基础
  14. Beginning SDL 2.0(2) TwinklebearDev SDL 2.0 Tutorial
  15. django 项目中使用多数据库 multiple databases
  16. BZOJ3203 SDOI2013保护出题人(三分)
  17. TImage 显示 资源中 的图片、TResourceStream、资源文件
  18. HDU 4690 EBCDIC (2013多校 1005题 胡搞题)
  19. HihoCoder 1033交错和(数位DP第三题)
  20. 实用符号Alt+小键盘快输

热门文章

  1. 第四章 数据库和SQL 4-3 数据的更新(UPDATE语句的使用方法)
  2. [翻译] M13ProgressSuite
  3. 安全紧急预警-防范新型 Sigrun 勒索病毒
  4. Inter-System Differencing between GPS and BDS for Medium-Baseline RTK Positioning-12-18
  5. Java基础知识强化之集合框架笔记80:HashMap的线程不安全性的体现
  6. hdu 4803 Poor Warehouse Keeper(贪心+数学)
  7. 【bzoj 4710】 [Jsoi2011]分特产
  8. 64. [Mcoi2018]终末之诗(上)
  9. P2278 [HNOI2003]操作系统
  10. 《信息安全技术》实验二 Windows口令破解