我有一个字符串,其中定义了 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() 会返回 null。
有什么办法可以处理这样的 URL 吗?
最佳答案
@
不是 URL 中用户名或密码中的有效字符。它必须被编码。因此,如果您像这样编写 URI,您的代码将起作用:
ftp://kirk%40starfleetcom:spock123@enterprisecom/orders.txt
afaik,在构建 URI 之前,您应该简单地对用户名和密码进行 url 编码:
java.net.URLEncoder.encode(用户名)
关于java - 为 java.net.URI getUserInfo 处理具有 '@' 的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37576314/