HttpResponse响应模块设计与实现(http模块三)

 目录

类功能

类定义

类实现

编译测试


类功能

类定义

// HttpResponse响应模块功能设计
class HttpResponse
{
private:
    int _statu;
    bool _redirect_flag; // 重定向标志
    std::string _body;
    std::string _redirect_url; // 重定向地址
    std::unordered_map<std::string, std::string> _headers;
public:
    void ReSet(); // 重置
    void SetHeader(std::string &key, std::string &val);
    bool HasHeader(std::string &key);
    std::string GetHeader(std::string &key);
    void SetContent(std::string &body, std::string &type);
    void SetRedirect(std::string &url, int statu = 302); // 默认为302,临时重定向,301为永久重定向
    bool Close();
};

类实现

// HttpResponse响应模块功能设计
class HttpResponse
{
private:
    int _statu;
    bool _redirect_flag; // 重定向标志
    std::string _body;
    std::string _redirect_url; // 重定向地址
    std::unordered_map<std::string, std::string> _headers;

public:
    HttpResponse() : _redirect_flag(false), _statu(200) {}
    HttpResponse(int statu) : _redirect_flag(false), _statu(statu) {}
    void ReSet() // 重置
    {
        _statu = 200;
        _redirect_flag = false;
        _body.clear();
        _redirect_url.clear();
        _headers.clear();
    }
    // 插入头部字段
    void SetHeader(const std::string &key, const std::string &val)
    {
        _headers.insert(std::make_pair(key, val));
    }
    // 判断是否存在指定头部字段
    bool HasHeader(const std::string &key)
    {
        auto it = _headers.find(key);
        if (it == _headers.end())
            return false;
        return true;
    }
    // 获取指定头部字段的值
    std::string GetHeader(const std::string &key)
    {
        auto it = _headers.find(key);
        if (it == _headers.end())
            return "";
        return it->second;
    }
    //  正文设置
    void SetContent(std::string &body, const std::string &type = "text/html")
    {
        _body = body;
        SetHeader("Cnotent-Type", type);
    }
    // 默认为302,临时重定向,301为永久重定向
    void SetRedirect(std::string &url, int statu = 302)
    {
        _statu = statu;
        _redirect_flag = true;
        _redirect_url = url;
    }
    // 判断是否是短链接
    bool Close()
    {
        // 没有Connection字段,或者有Connection字段但是值是close,则是短链接,否则就是长链接
        // keep-alive是长链接的意思
        if (HasHeader("Connection") == true && GetHeader("Connection") == "keep-alive")
            return true;
        return false;
    }
};

编译测试

编译通过,并没有发现语法上的错误

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风玉骨

爱了!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值