当前位置: 首页 > article >正文

Mongoose 开源库--http协议 header 报头解析

一、http 协议 header 报头相关 API

  1. 获取http header的值
struct mg_str *mg_http_get_header(struct mg_http_message *hm, const char *name);

参数:

hm - HTTP message to look for header
name - Header name

返回值:

HTTP header value or NULL if not found

示例:

// Mongoose event handler
void fn(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
  if (ev == MG_EV_HTTP_MSG) {
    struct mg_http_message *hm = (struct mg_http_message *) ev_data;
    struct mg_str *s = mg_http_get_header(hm, "X-Extra-Header");
    if (s != NULL) {
      mg_http_reply(c, 200, "", "Holly molly! Header value: %.*s", (int) s->len, s->ptr);
    } else {
      mg_http_reply(c, 200, "", "Oh no, header is not set...");
    }
  }
}
  1. 解析http报头
    解析HTTP报头(例如Cookie报头),其形式为name1=value1;name2-value2;…并获取给定变量。
struct mg_str mg_http_get_header_var(struct mg_str s, struct mg_str v);

参数:

s - HTTP header
name - variable name name

返回值:

Return value: a requested variable, or an empty string.

示例:

struct mg_str *cookie = mg_http_get_header(hm, "Cookie");
struct mg_str token = mg_str("");

if (cookie != NULL) {
  token = mg_http_get_header_var(*cookie, mg_str("access_token"));
}

二、测试代码

测试代码如下:

struct mg_str *strToken=NULL;
strToken = mg_http_get_header(hm, "x-forwarded-for");
    if (strToken != NULL) 
    {
      MG_INFO(("Holly molly! Header value: %.*s", (int) strToken->len, strToken->ptr));
    } 
    else 
    {
      MG_INFO(("Oh no, header is not set..."));
    }
    strToken = mg_http_get_header(hm, "Authorization");
    if (strToken != NULL) 
    {
      MG_INFO(("Holly molly! Header value: %.*s", (int) strToken->len, strToken->ptr));
    } 
    else 
    {
      MG_INFO(("Oh no, header is not set..."));
    }

测试结果:
测试结果


http://www.kler.cn/a/154860.html

相关文章:

  • qt内部的特殊技巧【QT】
  • 【C语言】static关键字的三种用法
  • c#使用log4Net配置日志文件
  • 如何获取小程序的code在uniapp开发中
  • C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】
  • Oracle Primavera P6 最新版 v24.12 更新 1/2
  • 测试:性能测试
  • CSS:calc() 函数 / 动态计算长度值 / 不同场景使用
  • Django如何设置时区为北京时间?
  • iRDMA流量控制总结 - 5
  • 手摸手Element-ui路由VueRoute
  • RHEL8更新安全补丁,删除旧内核
  • Qt将打印信息输出到文件
  • ios(swiftui) 属性包装器详解
  • 手机爬虫用Fiddler详细教程
  • rust 日期和时间格式化输出
  • 关于IP与端口以及localhost
  • 【动态规划】LeetCode-931.下降路径最小和
  • 万界星空科技智能工厂主要建设模式
  • 工业机器视觉megauging(向光有光)使用说明书(三,轻量级的visionpro)
  • Python concurrent.futures实现多进程多线程编程
  • Redis数据存储:高效、灵活、实时
  • Google Chrome 下载 (离线版)
  • 职位招聘管理与推荐系统Python+Django网页界面+协同过滤推荐算法
  • C#:程序发布的大小控制
  • QT 中 QDateTime::currentDateTime() 输出格式备查