我需要处理传递给我们库的任何给定的url。所以刚开始我做:为什么我需要url encode =?
URL url = new URL(filename);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = new URL(uri.toASCIIString());
URLConnection conn = url.openConnection();
的URL http://www.stackoverflow.com?title =Člen8FO这给我的http://www.stackoverflow.com?title=%C4%8Clen8FO
一个URL和返回的403,当我提出的要求。于是我做了:
URL url = new URL(filename);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), URLEncoder.encode(url.getQuery(), "UTF-8"), url.getRef());
url = new URL(uri.toASCIIString());
这给了我的http://www.stackoverflow.com?title%3D%C4%8Clen8FO
一个url它为什么失败的一个明确=?我认为这完全有效。
更新:这太奇怪了。下面的代码失败之前,现在它成功了。
import java.io.InputStream;
import java.net.*;
public class UriIssue {
public static void main(String[] args) {
try {
openUriWithEncode("http://www.google.com/?q=\u010clen8FO");
System.out.println("completed successfully");
} catch (Exception ex) {
System.out.println("exception = " + ex);
}
try {
openUriNoEncode("http://www.google.com/?q=\u010clen8FO");
System.out.println("completed successfully");
} catch (Exception ex) {
System.out.println("exception = " + ex);
}
}
public static void openUriWithEncode(String fullUrl) throws Exception {
System.out.println("openUriWithEncode(" + fullUrl + ")");
URL url = new URL(fullUrl);
String query = url.getQuery() != null ? URLEncoder.encode(url.getQuery(), "UTF-8") : null;
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), query, url.getRef());
System.out.println("uri = " + uri.toASCIIString());
url = new URL(uri.toASCIIString());
URLConnection conn = url.openConnection();
InputStream stream = conn.getInputStream();
stream.close();
}
public static void openUriNoEncode(String fullUrl) throws Exception {
System.out.println("openUriNoEncode(" + fullUrl + ")");
URL url = new URL(fullUrl);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
System.out.println("uri = " + uri.toASCIIString());
url = new URL(uri.toASCIIString());
URLConnection conn = url.openConnection();
InputStream stream = conn.getInputStream();
stream.close();
}
}
url.getQuery()在这个例子中返回什么? – JamesB 2014-12-04 00:38:41
您的所有网址都适用于我,请再次检查。但是,URLEncoder.encode应该用于参数的值。请注意,您所做的URI调用应为您的查询提供URLEncode。 – 2014-12-04 01:05:59