超级课表

项目整体介绍

项目功能:

  • 注册用户
    • 注册用户需要提供学校,专业,姓名
  • 登录用户
    • 登录用户需要提供之前注册的学校,专业,姓名
  • 查询课表
    • 查询课表需要输入学校,专业,班级(班级中包括了年级,例:151就是15级1班)

项目模块:

  • 1.HTTP服务器框架
  • 2.业务实现
    • 1.爬学校的网站
    • 2.数据库操作
    • 3.页面制作

一.多线程HTTP服务器框架

1.1 读取请求并解析

1.1.1 解析首行(从socket中读取到数据按空格且切分)

  • 解析方法:切分出来的第一部分就是方法
  • 解析出URL
  • 解析URL中的path
  • 解析出query_string

1.1.2 解析heade

  • 解析出Content_Length
  • 解析出Content_Type

1.1.3 解析header

  • 请求都是表单形式所以按照表单格式解析

1.2 计算请求计算响应并写回客户端

1.2.1 处理静态页面

写一个HTML文

1.2.2 处理动态页面

根据页面输入参数不同返回不同页面使用了CGI技术
CGI技术(通用网关接口,一种协议,一种标准)
CGI技术功能: 让HTTP服务器的底层框架和上层应用解耦合
CGI技术优点:对编程语言的要求低(只要可以访问标准输入输出就可以(SQL语言不能访问标准输入输出))
CGI技术缺点:进程的频繁创建销毁效率低(进程池,FastCGI)

  • 服务器创建子进程
  • 子进程进行程序替换(替换为url_path指定的可执行程序即 CGI程序)
    • CGI程序:根据业务的具体需要,获取到用户输入的参数并进行动态页面的计算
    • 子进程是通过匿名管道+环境变量获取到用户输入的参数
    • 子进程进行重定向(把标准输入输出匿名管道的读端)
    • 子进程通过匿名管道(匿名管道的写端)把计算得到的动态HTML写会父进程
  • 父进程拿到子进程结果后拼装出一个HTTP响应
  • 把响应写回socket中

二.业务实现

2.1 爬取有用信息

2.1.1借助libcurl第三方库实现获取网页的功能

  • 输入目标是URL
  • 输出结果是html
    使用

  • 1.初始化句柄(curl_easy_init())

  • 2.设置响应如何处理
  • 3.发送请求
  • 4.清理对象
    2.2.2解析html文件

  • 解析出HTML中需要的专业,班级,课表

  • 将解析出来的结果写进数据库之中的专业,班级写入学校表
  • 将解析出来的课表写入课表中

2.2数据库操作

2.2.1 注册实现
  • 获取到用户定义的参数
  • 解析获取到的参数
  • 将获取到的参数插入数据库之中
2.2.2登录实现
  • 获取到参数(方法,query_string,body)
  • 获取到Content_Length,再从标准输入中读取body
  • 解析读取到的数据
  • 将读取到的数据拼装到查询SQL语句中
  • 执行查询语句对学校表中的数据进行查找,
    • 找到了就跳转至搜索页面
    • 找不到就跳转至注册页面
2.2.3 查询实现
  • 获取到参数(方法,query_string,body)
  • 获取到Content_Length,再从标准输入中读取body
  • 解析读取到的数据
  • 将读取到的数据拼装到查询SQL语句中
  • 执行查询语句对课表中的数据进行查找,
    • 找到了就讲课表打印出来
    • 找不到就提示用户占时没有该课表
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值