从Python中的SIP URI解析电话号码

时间:2015-09-11 10:41:47

标签: python parsing sip

urlparse是否可以使用正确的模块,或者我们还有别的东西吗?

>>> o = urlparse.urlparse('"User Name" <sips:+msisdn@domain?Accept-Contact=+sip.instance="<urn:uuid:2e7671fd-31dd-1393-dkd6-835fe09f314f>";require;explicit>', scheme='sips')
>>> print o
ParseResult(scheme='sips', netloc='', path='"User Name" <sips:+msisdn@domain', params='', query='Accept-Contact=+sip.instance="<urn:uuid:2e7671fd-31dd-1393-dkd6-835fe09f314f>";require;explicit>', fragment='')
>>> 

我期待+msisdn@domainnetloc path,但path中的值有点奇怪。

2 个答案:

答案 0 :(得分:2)

您可以看一下如何在其他库中实现,例如在 twisted 中: https://github.com/twisted/twisted/blob/trunk/twisted/protocols/sip.py#L427

答案 1 :(得分:2)

您没有解析SIPS URI,而是解析记录地址(AOR)。如果从AOR中提取URI,您将获得:

>>> o = urlparse.urlparse('sips:+msisdn@domain?Accept-Contact=+sip.instance="<urn:uuid:2e7671fd-31dd-1393-dkd6-835fe09f314f>";require;explicit')
>>> print o
ParseResult(scheme='sips', netloc='', path='+msisdn@domain', params='', query='Accept-Contact=+sip.instance="<urn:uuid:2e7671fd-31dd-1393-dkd6-835fe09f314f>";require;explicit', fragment='')

根据RFC 3986,SIPS URI的userinfo@host部分应该进入path组件,因此结果在这里是正确的。