java - 为 java.net.URI getUserInfo 处理具有 '@' 的 URL

标签 java groovy uri

我有一个字符串,其中定义了 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/

相关文章:

java - 如何在 Java 中使用 printf 用 0 填充空白区域

grails - Groovy AST 转换不会在 Grails 编译期间应用,仅在自动重新加载期间应用

android - 如何获取 4.4 kitkat 上的铃声 URI

android - ERROR/MemoryFile : MemoryFile. 在 ashmem 仍然打开时调用了 finalize()

java - ArrayList 的 toArray() 方法无法正常工作

java - 使用 setVisible 方法控制可见性时出错

groovy - 在geb模块中查找直接子模块

maven - Groovy 文件无法在 Intellij IDEA 中编译

c# - 如何创建正确转义文件 ://URI in C#?

java - 文件名、目录名或卷标语法不正确 - Kotlin - Maven