首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我应该使用哪一个: urlparse还是urlsplit?

我应该使用哪一个: urlparse还是urlsplit?
EN

Stack Overflow用户
提问于 2011-03-29 20:02:52
回答 3查看 12.6K关注 0票数 34

我应该使用哪种URL parsing function pair?为什么?

or

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-29 20:08:52

直接从the docs you linked yourself

urllib.parse.urlsplit(urlstring, scheme='', allow_fragments=True)

这类似于urlparse(),但不会将参数与URL分开。如果需要更新的URL语法,允许将参数应用于URL的路径部分的每个段(参见RFC2396),则通常应使用此方法而不是urlparse()

票数 16
EN

Stack Overflow用户

发布于 2015-05-01 10:57:42

urlparse.urlparse返回6元组(带有附加参数元组)

urlparse.urlsplit返回5元组

属性属性|索引|值不存在的情况下

params _|_3个参数|最后一个路径元素的参数|空字符串

仅供参考:根据RFC2396的说法,_parameter_在URL规范>对当前客户端应用程序的广泛测试中表明,大多数已部署的系统不使用";“字符来表示尾随参数信息,并且路径段中存在的分号不会影响该段的相对解析。因此,参数已作为单独的组件删除,现在可以出现在任何路径段中。它们的影响已从解析相对URI引用的算法中移除。

票数 7
EN

Stack Overflow用户

发布于 2020-08-07 02:36:04

由于您链接的文档没有包含一个带有非空params的示例,在我找到this之前,我也感到困惑。

代码语言:javascript
复制
>>> urllib.parse.urlparse("http://example.com/pa/th;param1=foo;param2=bar?name=val#frag")
ParseResult(scheme='http', netloc='example.com', path='/pa/th', params='param1=foo;param2=bar', query='name=val', fragment='frag')

(一些历史,因为我被书呆子狙击了。)

除了URL组件参数,即/user/213/settings或查询参数/user?id=213之外,我从未听说过url“参数”,我认为它基本上已经过时了。

一开始,RFC1738对HTTP URL执行defined命令,使其永远不允许path中的;

代码语言:javascript
复制
http://<host>:<port>/<path>?<searchpart>

<path><searchpart>组件中的

,"/",";","?“是保留的。

在其他方案中,like ;:// url-path保留了有特殊含义的ftp

代码语言:javascript
复制
<cwd1>/<cwd2>/.../<cwdN>/<name>;type=<typecode>

显然是在1995年,RFC1808 defined URL params作为pathquery之间的顶级组件

代码语言:javascript
复制
<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>

然后在1998年,RFC2396 defined URI具有相邻的顶级组件pathquery

代码语言:javascript
复制
<scheme>://<authority><path>?<query>

其中,pathdefined为多个path_segments,每个都可以包括param

代码语言:javascript
复制
path          = [ abs_path | opaque_part ]
abs_path      = "/"  path_segments
path_segments = segment *( "/" segment )
segment       = *pchar *( ";" param )

最后在2005年,RFC3986淘汰了RFC1808和2396,与RFC2396类似的defining URI

代码语言:javascript
复制
URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ] 

hier-part   = "//" authority path-abempty
            / path-absolute
            / path-rootless
            / path-empty

;params的特殊语法是considered,这是URI语法中不透明的部分,可能特定于HTTP(S)方案,也可能只是一些特定的实现:

除了分层路径中的点段之外,通用语法认为路径段是不透明的。URI生成应用程序通常使用段中允许的保留字符来分隔特定于方案或特定于解引用处理程序的子组件。例如,分号(";")和等号("=")保留字符通常用于分隔适用于该段的参数和参数值。逗号(",")保留字符通常用于类似的目的。例如,一个URI生产者可能使用诸如"name;v=1.1“之类的片段来指示对"name”版本1.1的引用,而另一个生产者可能使用诸如"name,1.1“之类的片段来指示相同的内容。参数类型可以由特定于方案的语义来定义,但在大多数情况下,参数的语法是特定于URI的取消引用算法的实现的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5472160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档