You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Libsoup服务端是否支持通配符路径匹配?该如何实现?

Libsoup 匹配中间带通配符的URL路径实现方案

你原本的写法无法生效是因为Libsoup的soup_server_add_handler原生不支持路径中间带通配符的匹配规则:它仅支持精确路径匹配和前缀匹配(仅路径末尾的*会被识别为通配符,中间的*会被当做普通字符处理)。

该需求可以通过Libsoup+GLib组合实现,不需要引入额外依赖,具体实现方式如下:


实现步骤

  • 第一步:注册前缀匹配handler,接收所有/foo/开头的请求
    代码示例:
    soup_server_add_handler (server, "/foo/", NULL, server_callback,
                 unregister_callback, data);
    
  • 第二步:在回调函数内使用GLib的GPatternSpec做通配符匹配,过滤出符合/foo/*/bar/规则的路径
    回调函数示例代码:
    #include <glib.h>
    #include <libsoup/soup.h>
    
    void server_callback (SoupServer *server, SoupServerMessage *msg,
                          const char *path, GHashTable *query,
                          gpointer user_data) {
        // 匹配规则:同时适配带结尾斜杠的/foo/任意内容/bar/和不带斜杠的/foo/任意内容/bar
        const gchar *pattern = "/foo/*/bar*";
        if (!g_pattern_match_simple(pattern, path)) {
            // 不匹配规则直接返回404
            soup_server_message_set_status(msg, SOUP_STATUS_NOT_FOUND, NULL);
            return;
        }
    
        // 匹配成功,后续正常处理业务逻辑
        // ...
    }
    

可选优化

如果需要更复杂的路径匹配规则,也可以用GLib内置的GRegex正则匹配实现,灵活度更高。


内容的提问来源于stack exchange,提问作者Ashutosh Naik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:18:02