Comments (5)
Hi kkvilekval,
While admittedly a bit of a head scratcher initially, this is expected behavior.
The host of 'http://:9021/'
is empty. As such, join()
adopts the empty
string as the new host.
For context, this is the behavior of Python's standard urllib.parse.urljoin()
,
too.
>>> 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
to, the easiest way to do that is with set()
.
>>> 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?
from furl.
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
from furl.
(well at least similar to how the browser does joins)
Browsers don't join http://domain.com:9999/
and http://:9021/
into
http://domain.com:9021/
either, though. For example, a quick test:
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
joins http://domain.com:9999/
and http://:9021/
into
http://domain.com:9021/
?
from furl.
Little bump -- did you find an example piece of software (application, library, tool, etc) that
joins http://domain.com:9999/
and http://:9021/
into http://domain.com:9021/
?
from furl.
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.
from furl.
Related Issues (20)
- furl doesn't type-hint itself as Text HOT 3
- url parsing still accepts semicolon as separator HOT 5
- Add typing support HOT 6
- Hi, if the URL is like '127.0.0.1:8080/a/b', the result is '8080/a/b', which seems incorrect HOT 2
- How handle javascript:void(0) HOT 2
- Feature: Addition of `is_domain` flag
- Maximum recursion depth exceeded error for url with large list HOT 3
- Adding README to PyPi HOT 2
- '127.0.0.1:8329' parsed wrong in Python 3.9+ HOT 3
- Add SECURITY.md HOT 3
- Feature request: Convert to unescaped string HOT 2
- .join() and .path.normalize() incorrectly interpret base paths ending /. or /..
- furl.path object is NOT of type: pathlib.Path HOT 1
- Feature requests: get url relative to another url
- Setting multiple query params for the same key and resultant url format
- Seems to be a bug when paring multiple '@'s ?
- Use the `ipaddress` module to detect valid IPV6 HOT 1
- a method to set an individual query parameter without removing the rest or keeping the original value
- Removes "git@" from git remote URL HOT 1
- URL fragment percent-encoding
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from furl.