You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python以最简洁规范的方式替换URL中的主机名?

正确替换URL主机名的Python实现

要简洁且正确地替换URL中的主机名,同时支持IPv6、含用户名/密码的URL等所有规范场景,可以基于Python标准库urllib.parse实现,避免手动拼接netloc带来的各种问题。

实现代码

import urllib.parse

def replace_url_hostname(url: str, new_hostname: str) -> str:
    parsed = urllib.parse.urlparse(url)
    
    # 保留原URL的用户信息(用户名/密码)
    userinfo_segment = ""
    if parsed.username is not None:
        userinfo_segment = parsed.username
        if parsed.password is not None:
            userinfo_segment += f":{parsed.password}"
        userinfo_segment += "@"
    
    # 处理IPv6主机名:自动补全方括号(如果未提供)
    if ":" in new_hostname and not (new_hostname.startswith("[") and new_hostname.endswith("]")):
        new_hostname = f"[{new_hostname}]"
    
    # 保留原URL的端口(如果存在)
    port_segment = f":{parsed.port}" if parsed.port is not None else ""
    
    # 拼接新的netloc部分
    new_netloc = f"{userinfo_segment}{new_hostname}{port_segment}"
    
    # 生成新的URL
    updated_parsed = parsed._replace(netloc=new_netloc)
    return urllib.parse.urlunparse(updated_parsed)

测试场景验证

以下是几种典型场景的测试结果,验证方案的正确性:

  1. 普通IPv4带端口的URL
original_url = "https://127.0.0.1:6443/path?query=foo#bar"
print(replace_url_hostname(original_url, "foobar.tld"))
# 输出:https://foobar.tld:6443/path?query=foo#bar
  1. 含用户名和密码的URL
original_url = "https://admin:secret@old-domain.tld/dashboard"
print(replace_url_hostname(original_url, "new-domain.tld"))
# 输出:https://admin:secret@new-domain.tld/dashboard
  1. IPv6格式的URL(原URL带方括号)
original_url = "https://[::1]:8080/api"
print(replace_url_hostname(original_url, "[2001:db8::1]"))
# 输出:https://[2001:db8::1]:8080/api
  1. 输入未带方括号的IPv6主机名
original_url = "http://example.com"
print(replace_url_hostname(original_url, "::1"))
# 输出:http://[::1]
  1. 无端口的普通URL
original_url = "http://example.com/docs"
print(replace_url_hostname(original_url, "docs.example.org"))
# 输出:http://docs.example.org/docs

方案优势

  • 完全基于标准库:无需额外安装依赖,兼容性强
  • 自动处理边缘场景:
    • 保留原URL的用户认证信息(用户名/密码)
    • 自动补全IPv6主机名所需的方括号,符合URL规范
    • 保留原端口(如果存在),无端口时不额外添加
    • 适配所有RFC规范的URL格式

内容的提问来源于stack exchange,提问作者intelfx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:03:09