为 java.net.URI getUserInfo 处理带有“@”的 URL
Handling URLs which have '@' for java.net.URI getUserInfo
我有一个字符串,其中定义了 FTP URL,我想从该字符串中解析用户名和密码详细信息。为此,我使用 java.net.URI (https://docs.oracle.com/javase/6/docs/api/java/net/URI.html)...
的 getUserInfo 方法
def userInfo = uri.getUserInfo()
def username
def password
if(userInfo){
def pos = userInfo.indexOf(":")
if(pos >= 0){
username = userInfo.substring(0, pos)
password = userInfo.substring(pos+1)
}
}
这段代码工作正常,除非 URL 中有一个 '@',就像这样..
ftp://kirk@starfleet.com:spock123@enterprise.com/orders.txt
对于这样的 URL,调用 uri.getUserInfo() returns null.
有什么办法可以处理这样的URL吗?
@
不是 URL 中的用户名或密码中的有效字符。它必须被编码。因此,如果您像这样编写 URI,您的代码将起作用:
ftp://kirk%40starfleetcom:spock123@enterprisecom/orders.txt
afaik,在构建 URI 之前,您应该简单地对用户名和密码进行 url 编码:
java.net.URLEncoder.encode(username)
我有一个字符串,其中定义了 FTP URL,我想从该字符串中解析用户名和密码详细信息。为此,我使用 java.net.URI (https://docs.oracle.com/javase/6/docs/api/java/net/URI.html)...
的 getUserInfo 方法 def userInfo = uri.getUserInfo()
def username
def password
if(userInfo){
def pos = userInfo.indexOf(":")
if(pos >= 0){
username = userInfo.substring(0, pos)
password = userInfo.substring(pos+1)
}
}
这段代码工作正常,除非 URL 中有一个 '@',就像这样..
ftp://kirk@starfleet.com:spock123@enterprise.com/orders.txt
对于这样的 URL,调用 uri.getUserInfo() returns null.
有什么办法可以处理这样的URL吗?
@
不是 URL 中的用户名或密码中的有效字符。它必须被编码。因此,如果您像这样编写 URI,您的代码将起作用:
ftp://kirk%40starfleetcom:spock123@enterprisecom/orders.txt
afaik,在构建 URI 之前,您应该简单地对用户名和密码进行 url 编码:
java.net.URLEncoder.encode(username)