当前位置: 首页 > 面试题库 >

更改网址中的主机名

南宫书
2023-03-14
问题内容

我正在尝试使用python更改url中的主机名,并且一直在使用urlparse模块一段时间,但找不到令人满意的解决方案。例如,考虑URL:

https://www.google.dk:80/barbaz

我想将“ www.google.dk”替换为“ www.foo.dk”,因此得到以下网址:

https://www.foo.dk:80/barbaz。

因此,我要替换的部分是urlparse.urlsplit所指的主机名。我曾希望urlsplit的结果能让我进行更改,但是结果类型ParseResult不允许我这样做。如果没有其他办法,我当然可以通过将所有部分与+附加在一起来重新构造新的url,但这会给我留下一些非常丑陋的代码,并带有很多条件,以便在正确的位置获取“://”和“:”


问题答案:

您可以使用urllib.parse.urlparse函数和ParseResult._replace方法(Python
3):

>>> import urllib.parse
>>> parsed = urllib.parse.urlparse("https://www.google.dk:80/barbaz")
>>> replaced = parsed._replace(netloc="www.foo.dk:80")
>>> print(replaced)
ParseResult(scheme='https', netloc='www.foo.dk:80', path='/barbaz', params='', query='', fragment='')

如果您使用的是Python 2,请替换urllib.parseurlparse

ParseResult是的子类,namedtuple并且_replace是以下namedtuple方法:

返回命名元组的新实例,用新值替换指定字段

更新

正如@ 2rs2ts在注释netloc属性中所说的,包括端口号。

好消息:ParseResult具有hostnameport属性。坏消息:hostnameport不的成员namedtuple,他们的动态特性,你不能这样做parsed._replace(hostname="www.foo.dk")。它将引发异常。

如果您不想拆分,:并且您的网址始终有一个端口号,却没有,username并且password(例如“ https://
username:password@www.google.dk:80 /
barbaz
之类的网址”),您可以这样做:

parsed._replace(netloc="{}:{}".format(parsed.hostname, parsed.port))


 类似资料:
  • 我们有MySQL服务器及其复制运行在另一台机器上。主从机都运行在MySQL5.6上,现在的计划是更新主从机的IP。我们计划在复制中使用下面的查询。 请确认一下上述方法是否正确,是否有足够的信息,以便在主主机ip更新的情况下进行复制。 提前道谢。

  • 有没有办法通过在容器的命令行中发送命令来重命名lxc容器主机名?我知道您可以执行类似于的操作,然后使用()重命名配置中的主机名和路径。 但是,我可以不离开容器的控制台,然后在主控制台中键入内容来完成它吗?

  • 问题内容: 我正在尝试制作一个可以更改PC /笔记本电脑IP地址和子网掩码的程序。我要输入的内容与Windows(ip / subnet,dns / alternate dns)上IPv4属性的接口相似。 我现在可以想到的是使用netsh命令更改Windows ip。我想做的是在Windows上设置/获取以太网设置 提前致谢 问题答案: 您可以在JAVA中更改注册表,这应该可以解决问题。这些应该有

  • 当来自后台服务和移动屏幕的API调用关闭时。出现以下错误。 java.net.无法解析主机:没有与主机名相关联的地址W/System.err:在java.net.InetAddress.lookupHostByName(InetAddress.java:424)在java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)在java.net

  • 问题内容: 任何人都知道,如果使用jquery或通用javascript,我可以在http ajax调用中从标头更改引荐来源网址? 基本上,我希望它是从我的页面发送的,但是从另一个页面有一个引荐来源网址。任何信息都很好。 问题答案: 浏览器将始终为我完成的测试覆盖引荐来源网址。这意味着您不能更改ajax调用的引用者。

  • 问题内容: 我的主机文件(C:\ WINDOWS \ system32 \ drivers \ etc \ hosts)具有一堆IP地址到主机名的映射: 我正在尝试找到一种通过Java API以编程方式从IPAddress转换为HostName的方法。 伪代码: 问题答案: 我从这里尝试了代码,它可以工作。即: