-
Notifications
You must be signed in to change notification settings - Fork 151
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
relative port address not updated #82
Comments
Hi kkvilekval, While admittedly a bit of a head scratcher initially, this is expected behavior. The host of For context, this is the behavior of Python's standard >>> from urllib.parse import urljoin
>>> urljoin('http://domain.com:9999', 'http://:9021/')
'http://:9021/' And other language's standard libraries, too. Like Node's. $ node
> url.resolve('http://domain.com:9999/', 'http://:9021/')
'http://:9021/' Back to your original example. If you want to set the port of an existing URL >>> from furl import furl
>>> furl('http://domain.com:9999').set(port=furl('http://:9021/').port).url
'http://domain.com:9021' Or, to preserve the original host, join on a URL with that same host. >>> from furl import furl
>>> furl('http://domain.com:9999').join('http://domain.com:9021/').url
'http://domain.com:9021' Does that answer your question? |
Furl seemed like a good place to actually have a join that would work properly (well at least similar to how the browser does joins). The other libraries don't really mimic browser behavior well and so I was looking for an alternative.. I ended up coding it externally but thought it might make a good addition: def urljoin(base, partial, **kw):
""" Join all components for a url overriding any components in base from partial
@param base: The base url
@param partial: The overriding url
@param kw : extra url parameters
@return a new url string
"""
updated = furl.furl (base)
partial = furl.furl (partial)
updated.scheme = partial.scheme or updated.scheme
updated.username = partial.username or updated.username
updated.password = partial.username or updated.username
updated.host = partial.host or updated.host
updated.port = partial.port or updated.port
updated.path = urlparse.urljoin (str(updated.path), str(partial.path))
updated.query.params = partial.query.params or updated.query.params
updated.query.params.update (kw)
return updated.url |
Browsers don't join In both Chrome and Firefox, the click me anchor doesn't navigate to It doesn't navigate anywhere. Do you have an example piece of software (application, library, tool, etc) that |
Little bump -- did you find an example piece of software (application, library, tool, etc) that |
I will close .. after checking the spec on relative urls (https://www.ietf.org/rfc/rfc1808.txt) it appears that netloc is not parsed at all and is replaced completely see (step 3 in section 4). That said.. I do find the functionality useful especially when dealing with multi-port services such as websockets and others. |
expected `http://domain.com:9021/'
expected `https://domain.com:9021/'
The text was updated successfully, but these errors were encountered: