Объединение трех компонентов URL в один URL - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь написать функцию объединения трех компонентов URL: протокола, местоположения и ресурса в один URL.

У меня есть следующий код, и он работает только частично, возвращаяURL-адрес только с компонентами протокола и ресурса, но без компонента местоположения.

Код:

from urllib.parse import urlparse
import os
def buildURL(protocol, location, resource):
    return urllib.parse.urljoin(protocol, os.path.join(location, 
    resource))

Example: buildURL('http://', 'httpbin.org', '/get')

Возвращает http:///get.Я пытаюсь отладить это, чтобы позволить параметру location быть в URL.Должен возвращаться http://httpbin.org/get.

Как успешно создать URL-адрес?

Ответы [ 2 ]

2 голосов
/ 31 марта 2019

Это потому, что вы положили /get в os.path.join. Вы должны назвать это как buildURL('http://', 'httpbin.org', 'get'). os.path.join будет обрабатывать / как абсолютный путь, который будет подключен от корня базового местоположения, который является первым параметром функции join: location

1 голос
/ 31 марта 2019

Вы не должны использовать os.path здесь вообще.Этот модуль предназначен для путей файловой системы , например, для работы с такими вещами, как /usr/bin/bash и C:\Documents and Settings\User\.

. Он не предназначен для создания URL-адресов.На них не влияет ОС хоста пользователя.

Вместо этого используйте urlunparse() или urlunsplit() из urllib.parse:

from urllib.parse import urlunparse

urlunparse(('https', 'httpbin.org', '/get', None, None, None))
# 'https://httpbin.org/get'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...