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

使用httmock时含斜杠(/)的URL匹配失效问题求助

解决httmock中含斜杠的URL匹配失效问题

问题根源

你踩了个很容易忽略的小坑:httmock的urlmatch装饰器里,netloc参数是专门用来匹配域名部分的,它根本不会包含URL里的路径(也就是域名后面的/hi这部分)。你之前把路径写到netloc里,自然匹配不上实际请求的URL啦。

正确的写法

要匹配路径,得用urlmatch的path参数!把域名和路径分开指定,就能正常匹配了。如果想同时兼容带末尾斜杠和不带的情况,可以给路径正则加个可选的斜杠/?。

修正后的代码如下:

from httmock import urlmatch, HTTMock
import requests

@urlmatch(netloc=r'(.*\.)?test.com', path=r'/hi/?')
def test_mock(url, request):
    return 'Feeling lucky, punk?'

with HTTMock(test_mock):
    # 不管是/hi还是/hi/都能匹配成功
    r1 = requests.get('http://test.com/hi')
    print(r1.text)  # 输出 Feeling lucky, punk?
    
    r2 = requests.get('http://test.com/hi/')
    print(r2.text)  # 同样输出 Feeling lucky, punk?

补充说明

  • netloc=r'(.*\.)?test.com':负责匹配所有test.com的子域名(包括test.com本身)
  • path=r'/hi/?':/?表示末尾的斜杠是可选的,这样/hi和/hi/两种路径都能被匹配到
  • 如果需要严格匹配/hi/(必须带末尾斜杠),就把path写成r'/hi/'即可

内容的提问来源于stack exchange,提问作者Akseli Arvaja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:56:35