根据不同的请求返回不同的内容 | 手把手教你入门Python之一百一十二

简介: 本节实现根据不同的请求返回不同的内容,使浏览器访问 /register 或 /login 使返回不同的内容。

上一篇:Http请求头 | 手把手教你入门Python之一百一十一

下一篇:WSGI服务器的介绍| 手把手教你入门Python之一百一十三

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

根据不同的请求返回不同的内容

将前面的代码简化一下:

import socket

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', 8090))
server_socket.listen(128)

while True:
    client_socket, client_addr = server_socket.accept()
    data = client_socket.recv(1024).decode('utf8')

    # 响应头
    response_header = 'HTTP/1.1 200 OK\n' + 'content-type:text/html\n'
    response_header += '\n'

    #响应体
    response_body = 'hello world'

    # 响应
    response = response_header + response_body

    # 发送给客户端
    client_socket.send(response.encode('utf8'))

这段代码运行时访问得到的响应都是 hello world ,现在我们实现根据不同的请求返回不同的内容,使浏览器访问 /register 或 /login 使返回不同的内容。
关于请求的地址我们可以在请求头的第一行中获得,而在浏览器请求时有可能 data 为空,在循环体中添加如下代码:

path = ''
if data:  # # 浏览器发送过来的数据有可能是空的
    path = data.splitlines()[0].split(' ')[1]
    print('请求的路径是{}'.format(path))

可以看到在浏览器中访问localhost:8090/login后控制台输出了访问的路径:

image.png

接下来我们可以通过这个信息来定制不同的 response_body (此时浏览器默认的读取编码为gbk,需在代码中调整一下):

if path == '/login':
    response_body = '欢迎来到登录页面'
elif path == '/register':
    response_body = '欢迎来到注册页面'
elif path == '/':
    response_body = '欢迎来到首页'

如果我们想以utf8的编码返回,我们只需要在响应头中的 content-type:text/htmln 改写为 content-type:text/html;charset=utf8n,告知浏览器相应内容的编码方式。
当在浏览器中什么也不访问时,也应该有相应的响应内容,我们可以在分支语句中添加如下分支:

else:
    # 页面未找到   404 Page Not Found
    response_header = 'HTTP/1.1 404 Page Not Found\n'
    response_body = '对不起,您要查看的页面不存在!!!'

可以在浏览其中访问效果如下:

image.png

面向对象的服务器封装

import socket


class MyServer(object):
    def __init__(self, ip, port):
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.bind((ip, port))
        self.socket.listen(128)

    def run_forever(self):
        while True:
            client_socket, client_addr = self.socket.accept()
            data = client_socket.recv(1024).decode('utf8')

            path = ''
            if data:
                path = data.splitlines()[0].split(' ')[1]

            response_header = 'HTTP/1.1 200 OK\n'

            if path == '/login':
                response_body = '欢迎来到登录页面'
            elif path == '/register':
                response_body = '欢迎来到注册页面'
            elif path == '/':
                response_body = '欢迎来到首页'
            else:
                response_header = 'HTTP/1.1 404 Page Not Found\n'
                response_body = '对不起,您要查看的页面不存在!!!'

            response_header += 'content-type:text/html;charset=utf8\n'
            response_header += '\n'

            response = response_header + response_body
            client_socket.send(response.encode('utf8'))


server = MyServer('0.0.0.0', 9090)
server.run_forever()

运行结果:
image.png
image.png
image.png

配套视频

相关文章
|
1月前
|
数据采集 存储 开发者
如何动态调整Python爬虫的Request请求延迟
如何动态调整Python爬虫的Request请求延迟
|
2月前
|
XML JSON API
淘宝商品详情API的调用流程(python请求示例以及json数据示例返回参考)
JSON数据示例:需要提供一个结构化的示例,展示商品详情可能包含的字段,如商品标题、价格、库存、描述、图片链接、卖家信息等。考虑到稳定性,示例应基于淘宝开放平台的标准响应格式。
|
16天前
|
数据管理 开发者 Python
揭秘Python的__init__.py:从入门到精通的包管理艺术
__init__.py是Python包管理中的核心文件,既是包的身份标识,也是模块化设计的关键。本文从其历史演进、核心功能(如初始化、模块曝光控制和延迟加载)、高级应用场景(如兼容性适配、类型提示和插件架构)到最佳实践与常见陷阱,全面解析了__init__.py的作用与使用技巧。通过合理设计,开发者可构建优雅高效的包结构,助力Python代码质量提升。
68 10
|
1月前
|
数据采集 Web App开发 文字识别
Python爬虫多次请求后被要求验证码的应对策略
Python爬虫多次请求后被要求验证码的应对策略
|
1月前
|
数据采集 数据可视化 大数据
Python入门修炼:开启你在大数据世界的第一个脚本
Python入门修炼:开启你在大数据世界的第一个脚本
80 6
|
1月前
|
数据可视化 流计算 Python
Python创意爱心代码大全:从入门到高级的7种实现方式
本文分享了7种用Python实现爱心效果的方法,从简单的字符画到复杂的3D动画,涵盖多种技术和库。内容包括:基础字符爱心(一行代码实现)、Turtle动态绘图、Matplotlib数学函数绘图、3D旋转爱心、Pygame跳动动画、ASCII艺术终端显示以及Tkinter交互式GUI应用。每种方法各具特色,适合不同技术水平的读者学习和实践,是表达创意与心意的绝佳工具。
755 0
|
2月前
|
JSON API 数据格式
Python 请求微店商品详情数据 API 接口
微店开放平台允许开发者通过API获取商品详情数据。使用Python请求微店商品详情API的主要步骤包括:1. 注册并申请API权限,获得app_key和app_secret;2. 确定API接口地址与请求参数,如商品ID;3. 生成签名确保请求安全合法;4. 使用requests库发送HTTP请求获取数据;5. 处理返回的JSON格式响应数据。开发时需严格遵循微店API文档要求。
|
2月前
|
数据采集 人工智能 数据挖掘
Python 编程基础与实战:从入门到精通
本文介绍Python编程语言,涵盖基础语法、进阶特性及实战项目。从变量、数据类型、运算符、控制结构到函数、列表、字典等基础知识,再到列表推导式、生成器、装饰器和面向对象编程等高级特性,逐步深入。同时,通过简单计算器和Web爬虫两个实战项目,帮助读者掌握Python的应用技巧。最后,提供进一步学习资源,助你在Python编程领域不断进步。
|
JavaScript 测试技术 Go
用 Python 实现每秒百万级请求
本文讲的是用 Python 实现每秒百万级请求,Python 社区近来针对性能做了很多优化。CPython 3.6 新的字典实现方式提升了解释器的总体性能。得益于更快的调用约定和字典查询缓存,CPython 3.7 会更快。
2655 0
|
2月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。