HTTP URL 地址编码 Scala/Java

HTTP URL Address Encoding in Scala/Java

我想要一个加载 url 地址内容的函数,但我事先不知道 url 是否已编码。有解决这个问题的库函数吗?

一个可能的解决方案是先解码 url 然后再编码,但我必须以不同的方式处理 url 的每个部分(在下面的示例中路径部分中没有 ASCII 字符,但它也可能在查询部分中)。需要处理的细节太多了,如果有一个库能处理好那就太好了。


object UrlContent extends App {
  def connect(urls: String): Int = {
    val url = new URL(urls)
    val conn: HttpURLConnection = url.openConnection().asInstanceOf[HttpURLConnection]

    conn.getResponseCode
  }

  val urls1 = "http://www.ins.gob.pe/insvirtual/images/otrpubs/pdf/ponzo%C3%B1osos.pdf"
  val urls2 = "http://www.ins.gob.pe/insvirtual/images/otrpubs/pdf/ponzoñosos.pdf"

  println(connect(urls1))
  println(connect(urls2))
}```

The output is:

200
404

尝试lemonlabsuk/scala-uri,例如

import io.lemonlabs.uri.Url

val urls1 = Url.parse("http://www.ins.gob.pe/insvirtual/images/otrpubs/pdf/ponzo%C3%B1osos.pdf")
val urls2 = Url.parse("http://www.ins.gob.pe/insvirtual/images/otrpubs/pdf/ponzoñosos.pdf")

println(urls1)
println(urls2)

两种情况下的输出

http://www.ins.gob.pe/insvirtual/images/otrpubs/pdf/ponzo%C3%B1osos.pdf
http://www.ins.gob.pe/insvirtual/images/otrpubs/pdf/ponzo%C3%B1osos.pdf

所以它似乎能够检测到 URL 是否已经编码。