我觉得我一定错过了正确的主题,因为这似乎已经得到了明确的解答,所以很抱歉,如果这是重复的话。我在这里和其他地方阅读了很多帖子,我没有看到明确的“这是你怎么做的”这个问题的答案......
该程序将接收完整的URL作为字符串。例如: “http://www.stackoverflow.com/questions/somepage?somequery#somefragment”
我想取这个字符串并确保它被正确编码以用于与HttpClient类似的连接。
根据我的阅读,似乎这样做的方法是使用URI()构造函数,将各个部分作为参数。那么接下来的问题是,获取字符串url的最可靠方法是什么,我们一无所知,除了它是一个url,并将其分解为URI()构造函数所需的各种部分。
这是我拼凑在一起的东西。这种方法有什么缺陷吗?
URL url = new URL(urlString);
URI uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), null);
然后,uri变量包含一个编码的即用型URI。此代码到目前为止有效,但我想确保不存在任何可能发生的陷阱。
由于
答案 0 :(得分:4)
在某些情况下,URI类会执行其组件字段的转义。 管理URL编码和解码的推荐方法是使用URI,并使用toURI()和URI.toURL()在这两个类之间进行转换。 参考:http://download.oracle.com/javase/1.5.0/docs/api/java/net/URL.html
请注意,任何符合RFC 2396的 URL实例都可以转换为URI 。但是,某些严格遵守的URL无法转换为URI。
URI.toURL 是一种方便的方法,就好像调用它等同于在首次检查此URI是绝对的之后评估表达式new URL(this.toString())
* 即
答案 1 :(得分:0)
我认为没有必要构建URI。使用“URL url = new URL(urlString);”构造的url除非URL构造抛出MalformedURLException,否则HttpClient完全有效。
如果您要使用查询字符串(对于GET),则必须URLEncode