使用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
相关产品推荐
相关产品推荐

