前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1. Python 开发Web静态服务器 - 返回固定值

1. Python 开发Web静态服务器 - 返回固定值

作者头像
Devops海洋的渔夫
发布2022-01-17 08:39:10
5060
发布2022-01-17 08:39:10
举报
文章被收录于专栏:Devops专栏Devops专栏

1. Python 开发Web静态服务器 - 返回固定值

前言

2020年的开春,黑天鹅从未知深渊飞越中国大陆,随着春运的节奏,将武汉肺炎病毒扩散全国。

老李头作为一个小人物,只能安待家中,管好家人不随便出门,不给国家添乱。

随着每日都在跟踪观察疫情的变化,深圳的病例越来越多,以及随之而来将要上班带来的公共卫生风险,我的心情是越来越不安。

但是不安归不安,唯一让人可以静下心来的事情就是让自己沉浸到学习当中,待在家里、忘却疫情。

我看了下以前博客的文章,后续的几天会陆续整理前面使用Python开发Web服务的相关篇章,希望有兴趣阅读到的伙伴也可以通过学习的方式,缓解一下疫情带来的不安。

那么下面就是正文内容:

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

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

首先NetAssist开启TCP端口服务:

使用浏览器访问TCP服务:

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

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

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

代码语言:javascript
复制
[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数据,类似前面的网络调试器返回的数据即可

代码语言:javascript
复制
[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]# 

运行如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Python 开发Web静态服务器 - 返回固定值
  • 前言
  • 使用网络调试器模拟http服务器
    • 首先NetAssist开启TCP端口服务:
      • 使用浏览器访问TCP服务:
      • 使用TCP服务,开发Web静态服务器-返回:fat boss,give me binlang!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档