Python requests..compat.urljoin-在URL不包含访问方法时,预先添加访问方法

Python requests..compat.urljoin-在URL不包含访问方法时,预先添加访问方法,python,https,python-requests,Python,Https,Python Requests,这里有两种方法可以将https://前置到URL。出于某种原因,urljoin方法会给出奇怪的输出: from requests.compat import urljoin host = 'abc.def.com' host2 = host # brute-force string method if not host.startswith('https://'): host = 'https://' + host # Add schema if host.endswith('/'

这里有两种方法可以将https://前置到URL。出于某种原因,urljoin方法会给出奇怪的输出:

from requests.compat import urljoin

host = 'abc.def.com'
host2 = host

# brute-force string method
if not host.startswith('https://'):
    host = 'https://' + host  # Add schema
if host.endswith('/'):
    host = host[:-1]          # Strip /
print('Stringy way', host)

# nice library method? Doesn't quite work
print('urljoin    ', urljoin('https://', host2))
我看到的输出,带有奇怪的三个///字符,是

Stringy way https://abc.def.com
urljoin     https:///abc.def.com
对于其他变体,我也得到了无用的结果:

print('urljoin #2 ', urljoin('https:/', host2))
print('urljoin #3 ', urljoin('https:', host2))
print('urljoin #4 ', urljoin('https', host2))
给出:

urljoin #2  https:///abc.def.com
urljoin #3  https:///abc.def.com
urljoin #4  abc.def.com

这是用于此操作的错误函数吗?

urljoin函数通常用于将href锚点附加到现有url。例如:

from requests.compat import urljoin
url = 'https://abc.def.com'
href = '364'
urljoin(url, href)
我得到输出:-

'https://abc.def.com/364'
但是,如果我想使用“https://”来完成我的url,我宁愿使用:-

from requests.compat import urljoin
url = 'abc.def.com'
host = ('https://'+ url)
print(host)
我得到的结果是:

https://abc.def.com
我希望这会有所帮助。

您可以利用以下内容编写URL:

from urllib.parse import urlunsplit

print(urlunsplit(("https", "abc.def.com", "", "", "")))
结果:

https://abc.def.com
它将一个元组作为输入,该元组与的输出相匹配,具有以下元组属性:


我想这就是我在示例中展示的蛮力字符串方法。