我有一个字符串,其中定义了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)
}
}
此代码可以正常工作,除非该网址具有' @'在这样的.. ..
ftp://kirk@starfleet.com:spock123@enterprise.com/orders.txt
对于这样的URL,对uri.getUserInfo()的调用将返回null。
有没有办法处理这些网址?
答案 0 :(得分:1)
@
不是网址中用户名或密码中的有效字符。它必须编码。因此,如果您编写如下所示的URI,您的代码将会起作用:
ftp://kirk%40starfleetcom:spock123@enterprisecom/orders.txt
afaik,你应该在构造URI之前简单地对用户名和密码进行url编码:
java.net.URLEncoder.encode(username)