从 Python 中的 SIP URI 解析电话号码
Parsing telephone number from a SIP URI in Python
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@domain
为 netloc
或 path
,但 path
中的值有点奇怪。
您可能会看看它是如何在其他库中实现的,例如在 twisted 中:
https://github.com/twisted/twisted/blob/trunk/twisted/protocols/sip.py#L427
您不是在解析 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
部分,所以这里的结果是正确的。
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@domain
为 netloc
或 path
,但 path
中的值有点奇怪。
您可能会看看它是如何在其他库中实现的,例如在 twisted 中: https://github.com/twisted/twisted/blob/trunk/twisted/protocols/sip.py#L427
您不是在解析 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
部分,所以这里的结果是正确的。