美文网首页
Python 开发Web静态服务器 - 返回固定值:胖子老板,来

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

作者: Devops海洋的渔夫 | 来源:发表于2018-12-24 21:19 被阅读17次

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

    使用网络调试器模拟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]# 
    

    运行如下:


    关注微信公众号,回复【资料】、Python、PHP、JAVA、web,则可获得Python、PHP、JAVA、前端等视频资料。

    相关文章

      网友评论

          本文标题:Python 开发Web静态服务器 - 返回固定值:胖子老板,来

          本文链接:https://www.haomeiwen.com/subject/jmenkqtx.html