Python 开发Web静态服务器 - 返回固定值:胖子老板,来包槟榔

仅供学习,转载请注明出处

使用网络调试器模拟http服务器

上一个章节讲述了关于http的基本内容。那么下面使用NetAssist来模拟http访问的以及数据返回。

首先NetAssist开启TCP端口服务:

使用浏览器访问TCP服务:

从上面的操作过程来看,基本上可以理解了web服务器其实只要简单使用TCP进行对应数据的返回,就可以完成功能。

使用TCP服务,开发Web静态服务器-返回:fat boss,give me binlang!

首先编写服务的第一步功能,就是接受浏览器的请求数据并打印出来

[root@server01 web]# vim server.py 

#coding=utf-8
from socket import *

def handle_client(client_socket):
    """为一个客户端服务"""
    # 接收对方发送的数据
    recv_data = client_socket.recv(1024).decode("utf-8") #  1024表示本次接收的最大字节数
    # 打印从客户端发送过来的数据内容
    print("client_recv:",recv_data)

def main():
   # 创建套接字
   server_socket = socket(AF_INET, SOCK_STREAM)
   # 设置当服务器先close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7788端口
   server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
   # 设置服务端提供服务的端口号
   server_socket.bind(('', 7788))
   # 使用socket创建的套接字默认的属性是主动的,使用listen将其改为被动,用来监听连接
   server_socket.listen(128) #最多可以监听128个连接
   # 开启while循环处理访问过来的请求 
   while True:
      # 如果有新的客户端来链接服务端,那么就产生一个新的套接字专门为这个客户端服务
      # client_socket用来为这个客户端服务
      # server_socket就可以省下来专门等待其他新的客户端连接while True:
      client_socket, clientAddr = server_socket.accept()
      handle_client(client_socket)

if __name__ == "__main__":
   main()

运行执行如下:

好了,从上面的结果来看,服务端已经收到了浏览器发出的GET请求。那么只要服务端返回相应HTTP数据,就可以让浏览器显示数据了。

哟,好像很厉害

编写服务端返回http数据,类似前面的网络调试器返回的数据即可

[root@server01 web]# cat server.py 
#coding=utf-8
from socket import *

def handle_client(client_socket):
    """为一个客户端服务"""
    # 接收对方发送的数据
    recv_data = client_socket.recv(1024).decode("utf-8") #  1024表示本次接收的最大字节数
    # 打印从客户端发送过来的数据内容
    #print("client_recv:",recv_data)
    request_header_lines = recv_data.splitlines()
    for line in request_header_lines:
    print(line)
     
    # 返回浏览器数据
    # 设置返回的头信息 header
    response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到这个资源
    response_headers += "\r\n" # 空一行与body隔开
    # 设置内容body
    response_body = "<h1>fat boss<h1>\r\n" 
    response_body += "<h2>come on<h2>\r\n" 
    response_body += "<h3>binlang!!!<h3>\r\n" 

    # 合并返回的response数据
    response = response_headers + response_body
    
    # 返回数据给浏览器
    client_socket.send(response.encode("utf-8"))   #转码utf-8并send数据到浏览器
    client_socket.close()

def main():
   # 创建套接字
   server_socket = socket(AF_INET, SOCK_STREAM)
   # 设置当服务器先close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7788端口
   server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
   # 设置服务端提供服务的端口号
   server_socket.bind(('', 7788))
   # 使用socket创建的套接字默认的属性是主动的,使用listen将其改为被动,用来监听连接
   server_socket.listen(128) #最多可以监听128个连接
   # 开启while循环处理访问过来的请求 
   while True:
      # 如果有新的客户端来链接服务端,那么就产生一个新的套接字专门为这个客户端服务
      # client_socket用来为这个客户端服务
      # server_socket就可以省下来专门等待其他新的客户端连接while True:
      client_socket, clientAddr = server_socket.accept()
      handle_client(client_socket)

if __name__ == "__main__":
   main()
[root@server01 web]# 

运行如下:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

福布斯全球2000强企业HCL大量员工和商业信息公开暴露

近日,UpGuard研究团队发现位列福布斯全球2000强的IT服务和咨询公司Hindustan计算机有限公司(HCL)存在信息泄露的风险。HCL在多个子域上托管...

16340
来自专栏Python程序员杂谈

知乎回答:你是如何学习Django的

对应链接:https://www.zhihu.com/question/59426020/answer/615516853 (点赞走一走,学啥都好上手~)

20540
来自专栏Java识堂

@RequestParam等参数绑定注解是怎么实现的?自定义参数绑定注解的妙用

SpringMVC参数绑定的注解有很多,如@RequestParam,@RequestBody,@PathVariable,@RequestHeader,@Co...

54610
来自专栏晓月寒·

Spring Boot从入门到精通-项目搭建

Spring Boot极大的简化了java项目的开发,在之前如果想要开发一个java项目,需要安装tomcat或者其他容器插件。但是Spring Boot内部已...

8010
来自专栏玩转JavaEE

Spring Boot + Vue 前后端分离开发,前端网络请求封装与配置

前端网络访问,主流方案就是 Ajax,Vue 也不例外,在 Vue2.0 之前,网络访问较多的采用 vue-resources,Vue2.0 之后,官方不再建议...

13910
来自专栏云计算2019

宝塔面板定时备份网站数据库文件到腾讯云COS对象存储图文教程

对于很多站长朋友来说,网站数据是非常重要的,所以一定要勤备份,以防服务器出问题,数据不至于丢失无法还原。

37320
来自专栏京程一灯

新发布的 TypeScript 3.5 RC 作出的改进和优化[每日前端夜话0x71]

在2019年5月16日,**微软宣布推出最新的Ty peScript 版本候选版本:3.5 RC **。此版本修复了以前的一些问题,引入了新的改进、性能优化、并...

13640
来自专栏Bug生活2048

无缘小程序模板消息推送功能,只能为后台管理功能做准备

这两天打算把模板消息的功能开发完成,主要思路还是根据原博客小程序,有兴趣的可以参考[博客小程序]评论通知功能实现(一)——小程序发送模板消息的几种实现和[博客小...

15810
来自专栏晓月寒·

Spring Boot从入门到精通-使用WebFlux进行响应式编程(1)

例如,在以往的编程方式中,定义了一个变量a=b+c。b和c在以后的程序中发生了变化,但是a的值却还是开始的值;但是在响应式编程中a的值却依然可以根据b和c进行改...

15520
来自专栏MixLab科技+设计实验室

后微信时代,信息从高效到过载,飞聊还是没有突破

昨晚,字节跳动孵化已久的社交APP“飞聊”正式上线。飞聊是一款兴趣社交APP,除了最基础的聊天、音视频通话外,还结合了兴趣小组和动态,主打年轻人市场。

13510

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励