zoukankan      html  css  js  c++  java
  • HTTP响应

    1. http响应的过程

    简单的web server代码

    # encoding:utf-8
    # @Time : 2021/5/23 12:11 下午
    # @Author : yan
    # @Content: 最简单的http server
    
    from socket import *
    
    
    def create_server():
        server_socket = socket(AF_INET, SOCK_STREAM)
        try:
            server_socket.bind(("localhost", 9000))
            server_socket.listen(5)
            while (1):
                client_socket, address = server_socket.accept()
                rd = client_socket.recv(5000).decode()
                piece = rd.split("
    ")
                # GET / HTTP/1.1, GET /favicon.ico HTTP/1.1
                if len(piece) > 0: print(piece[0])
                data = "HTTP/1.1 200 OK
    " # 构造回应报文的回应行
                data += "Content-Type:text/html;charset=utf-8
    " # 构造回应报文的回应头
                data += "
    " # 回应头和回应体之间必须有一个空行
                data += "<html><body>Hello world</body></html>" # 构造回应报文的回应体
                client_socket.sendall(data.encode())
                client_socket.shutdown(SHUT_WR)
        except KeyboardInterrupt:
            print("
    Shutting down ...
    ")
        except Exception as exc:
            print("Error:
    ")
            print(exc)
    
        server_socket.close()
    
    
    if __name__ == '__main__':
        print("Access Http://localhost:9000")
        create_server()

    请求结果

    简单的浏览器客户端代码例子一

    import socket
    my_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    my_sock.connect(("127.0.0.1",9000))
    cmd = "GET http://127.0.0.1/remeo.txt HTTP/1.0
    
    ".encode()
    my_sock.send(cmd)
    while True:
        data = my_sock.recv(521)
        if len(data) < 1:
            break
        print(data.decode(), end="")
    
    # 服务器返回的消息
    # HTTP/1.1 200 OK
    # Content-Type:text/html;charset=utf-8
    #
    # <html><body>Hello world</body></html>
    my_sock.close()

    简单的浏览器客户端代码例子二

    import urllib.request
    # 这里urlib对socket进行了封装,解析的过程已经做了,只返回了响应体的内容
    fhand = urllib.request.urlopen("http://127.0.0.1:9000/remeo.txt")
    # 这里只能拿回响应体内容
    for line in fhand:
        # <html><body>Hello world</body></html>
        print(line.decode().strip())

    # TODO

  • 相关阅读:
    寄存器总结
    汇编知识积累
    windbg 配置符号路径
    UNICODE环境下读写txt文件操作
    vs2010 安装项目完成桌面快捷方式无法定位程序文件夹 解决方法
    spring源码解析之属性编辑器propertyEditor
    springboot国际化与@valid国际化支持
    No identifier specified for entity
    springboot 项目中css js 等静态资源无法访问的问题
    Git教程
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/14799831.html
Copyright © 2011-2022 走看看