Join parts of a URL - joinpath?


#1

Hello,

I’d like to build a url like “http://www.domain.com/get/data” from a Vector

parts = ["http://www.domain.com", "get", "data"]

At first sight, on a *nix system I will do

julia> joinpath(parts...)
"http://www.domain.com/get/data"

but I think joinpath is system dependant ie on Windows it may use \ instead of /

Is there a function which always use “/” (even with Windows system)

With Python, we have os.path.join and urllib.parse.urljoin
But I haven’t found a join... function in https://github.com/JuliaWeb/URIParser.jl

Kind regards


#2

I’m aware of

join(parts, "/")

but I wonder if a more “high level” function exists


#3

Does https://github.com/JuliaWeb/URIParser.jl have anything useful to you?


#4

I don’t see in URIParser.jl a function to concatenate parts of an url.


#5

Seems to me that this code from the README might be helpful, but this might not be everything you need:

Additionally, there is a method for taking the parts of the URI individually, as well as a convenience method taking host and path which constructs a valid HTTP URL:

julia> URI("hdfs","hdfshost",9000,"/root/folder/file.csv","","","user:password")
URI(hdfs://user:password@hdfshost:9000/root/folder/file.csv)

julia> URI("google.com","/some/path")
URI(http://google.com:80/some/path)

#6

oh yes… I was looking at a function in utils.jl
Thank you


#7

Glad I could help. My apologies - I did not notice that you had already checked the package. I could’ve saved you an iteration.


#8

But that’s not perfect…
How to do this if "/root/folder/file.csv" is in a Vector like ["root", "folder", "file.csv"]


#9

The URI takes a standard path, so joinpath should do what you need in *nix: that is, you can pass in the output of joinpath:

a = ["/","foo", "bar", "baz"]
URI("zzz.com", joinpath(a...))

This might not work on Windows, though, given that joinpath will likely use backslashes there.

There might be a more elegant way of doing this as well.


#10

How about a long-hand?

reduce(*, ["root", "folder", "file.csv"] .* "/")[1:end - 1] ==
       "root/folder/file.csv"

#11
joinpath("http://www.domain.com", "foo", "bar", "baz")

works fine even on Windows, it returns

"http://www.domain.com/foo/bar/baz"