Python 的“urlparse”:向 URL 添加 GET 关键字

发布于 2024-10-20 14:41:57 字数 268 浏览 3 评论 0原文

我正在这样做:

urlparse.urljoin('http://example.com/mypage', '?name=joe')

我得到这个:

'http://example.com/?name=joe'

虽然我想得到这个:

'http://example.com/mypage?name=joe'

我做错了什么?

I'm doing this:

urlparse.urljoin('http://example.com/mypage', '?name=joe')

And I get this:

'http://example.com/?name=joe'

While I want to get this:

'http://example.com/mypage?name=joe'

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

全部不再 2024-10-27 14:41:57

您可以使用 urlparse.urlunparse :

import urlparse
parsed = list(urlparse.urlparse('http://example.com/mypage'))
parsed[4] = 'name=joe'
urlparse.urlunparse(parsed)

You could use urlparse.urlunparse :

import urlparse
parsed = list(urlparse.urlparse('http://example.com/mypage'))
parsed[4] = 'name=joe'
urlparse.urlunparse(parsed)
甜味拾荒者 2024-10-27 14:41:57

您遇到了影响 Python 2.4-2.6 的已知错误

如果您无法更改或修补您的 Python 版本,@jd 的解决方案 将解决该问题。

但是,如果您需要一个像标准 urljoin 一样工作的更通用的解决方案,则可以使用包装器方法来实现该特定用例的解决方法,并默认为标准 urljoin( ) 否则。

例如:

import urlparse

def myurljoin(base, url, allow_fragments=True):
    if url[0] != "?": 
        return urlparse.urljoin(base, url, allow_fragments)
    if not allow_fragments: 
        url = url.split("#", 1)[0]
    parsed = list(urlparse.urlparse(base))
    parsed[4] = url[1:] # assign params field
    return urlparse.urlunparse(parsed)

You're experiencing a known bug which affects Python 2.4-2.6.

If you can't change or patch your version of Python, @jd's solution will work around the issue.

However, if you need a more generic solution that works as a standard urljoin would, you can use a wrapper method which implements the workaround for that specific use case, and default to the standard urljoin() otherwise.

For example:

import urlparse

def myurljoin(base, url, allow_fragments=True):
    if url[0] != "?": 
        return urlparse.urljoin(base, url, allow_fragments)
    if not allow_fragments: 
        url = url.split("#", 1)[0]
    parsed = list(urlparse.urlparse(base))
    parsed[4] = url[1:] # assign params field
    return urlparse.urlunparse(parsed)
沫尐诺 2024-10-27 14:41:57

我通过将 Python 2.6 的 urlparse 模块与我的项目捆绑在一起解决了这个问题。我还必须捆绑在 collections 中定义的 namedtuple,因为 urlparse 使用它。

I solved it by bundling Python 2.6's urlparse module with my project. I also had to bundle namedtuple which was defined in collections, since urlparse uses it.

你与昨日 2024-10-27 14:41:57

你确定吗?在 Python 2.7 上:

>>> import urlparse
>>> urlparse.urljoin('http://example.com/mypage', '?name=joe')
'http://example.com/mypage?name=joe'

Are you sure? On Python 2.7:

>>> import urlparse
>>> urlparse.urljoin('http://example.com/mypage', '?name=joe')
'http://example.com/mypage?name=joe'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文