【问题标题】:Change hostname of URL with urllib使用 urllib 更改 URL 的主机名
【发布时间】:2020-10-22 19:39:31
【问题描述】:

我想更改 URL 的主机名。

>>> import urllib


>>> url = "https://foo.bar.com:9300/hello"

>>> parsed = urllib.parse.urlparse(url)

>>> parsed
ParseResult(scheme='https', netloc='foo.bar.com:9300', path='/hello', params='', query='', fragment='')

因为parsed是一个namedtuple,所以scheme可以替换:

>>> parsed_replaced = parsed._replace(scheme='http')

>>> urllib.parse.urlunparse(parsed_replaced)
'http://foo.bar.com:9300/hello'

parsed 对象还具有主机名属性:

>>> parsed.hostname
'foo.bar.com'

但它不是namedtuple中的字段之一,所以不能像scheme那样替换。

有没有办法只替换 URL 中的主机名?

【问题讨论】:

    标签: python python-3.x url urllib urlparse


    【解决方案1】:
    import urllib.parse
    
    url = "https://foo.bar.com:9300/hello"
    parsed = urllib.parse.urlparse(url)
    hostname = parsed.hostname
    new_hostname = "my.new.hostname"
    
    parsed_replaced = parsed._replace(netloc=parsed.netloc.replace(hostname, new_hostname))
    
    print(parsed_replaced)
    

    【讨论】:

      【解决方案2】:

      您正在寻找netloc

      url = 'https://foo.bar.com:9300/hello'
      parsed = urllib.parse.urlparse(url)
      parsed_replaced = parsed._replace(netloc='spam.eggs.com:9300')
      
      urllib.parse.urlunparse(parsed_replaced)
      'https://spam.eggs.com:9300/hello'
      

      【讨论】:

        猜你喜欢
        • 2014-03-04
        • 1970-01-01
        • 1970-01-01
        • 2014-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多