As far as I understand, an URL consists of the folowing fields:
- Protocol (http, https, ftp, etc.)
- User name
- User Password
- Host address (an IP address or a DNS FQDN)
- Port (which can be implied)
- Path to a document inside the server documents root
- Set of arguments and values
- Document part (#)
as
protocol://user:password@host:port/path/document?arg1=val1&arg2=val2#part
I need a code to get value (or null/empty value if not set) of any of these fields from any given URL string. Am I to implement this myself or there is already a code for this so I don't need to invent a wheel?
I am particularly interested in Scala or Java code. C#, PHP, Python or Perl code can also be useful.
The URL class gives you everything you need. See http://download.oracle.com/javase/6/docs/api/java/net/URL.html
URL url = new URL("protocol://user:password@host:port/path/document?arg1=val1&arg2=val2#part");
url.getProtocol();
url.getUserInfo();
url.getAuthority();
url.getHost();
url.getPort();
url.getPath(); // document part is contained within the path field
url.getQuery();
url.getRef(); // gets #part
Use the java.net.URI class for this. URLs are for real resources and real protocols. URIs are for possibly non-existent protocols and resources.
In Java, just use the URL class. It provides methods such as getProtocol, getHost, etc. to obtain the different parts of the URL.
URL does not support ldap by default. One can extend URL and add protocols, but I ended up with a simple parser and a small new class.
Based on @Codemwnci answer, here's a full example to get the filename from a url with or without arguments:
URL videoUrl = new URL("https://somesite.com/path/v/t43.1792-2/1186696120_n.mp4?efg=something");
String videoFileName = videoUrl.getPath().substring(videoUrl.getPath().lastIndexOf("/") + 1);
1186696120_n.mp4
来源:https://stackoverflow.com/questions/3990640/could-you-share-a-link-to-an-url-parsing-implementation