우리 도서관에 전달 된 모든 URL을 처리해야합니다. 처음에는 그래서 내가 그랬어 : URL을 http://www.stackoverflow.com?title = Člen8FO를 들어왜 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();
를이 나에게 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
두 URL 모두 저에게 효과적 이었으므로 다시 확인하십시오. 그러나 URLEncoder.encode는 매개 변수의 값으로 사용해야합니다. URI 호출은 검색어를 URL 인코딩해야합니다. –