일부 웹 사이트의 콘텐츠를 가져 오는 데 문제가 있습니다. 국제 문자가 포함 된 다른 URL로 리디렉션되는 url로 이동하려고하면 Java에서 일반적으로 404 오류가 발생합니다. 브라우저에서이 url을 따라 가면 올바른 데이터를 얻습니다.URL의 Java HttpUrlConnection 국제 문자가 재 연결됩니다.
내가 hXXp로 이동하려면 예를 들어 : //www.dandy-magazine : //shar.es/cISmv
브라우저 hXXp 올바르게 나를 리디렉션 (2 개 이상의 유효한 링크를 게시 할 수 없습니다). com/la-griffe-de-la-tour-d % E2 % 80 % 99argent. wget에서 나는 처음에 사이트가 기존의 "위치 : http://www.dandy-magazine.com/la-griffe-de-la-tour-d%E2%80%99argent"
과 함께 리디렉션 301을 반환한다는 것을 알 수 있습니다. Java에서 (whith 리디렉션이 해제 된 경우) 리디렉션 301은 "Location: http://www.dandy-magazine.com/la-griffe-de-la-tour-dâargent
"과 함께 반환됩니다. URL 인코딩은 다음과 같습니다. "http://www.dandy-magazine.com/la-griffe-de-la-tour-d%C3%A2%C2%80%C2%99argent
". 보시다시피, 완전히 다른 사이트입니다.
샘플 코드는 (기본적으로 버전 1과 버전 2는 같은 일을 수행) : 도움
에 대한// version 1 - let java handle redirects
URL url = new URL("http://shar.es/cISmv");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setInstanceFollowRedirects(true);
con.getResponseCode();
return con.getURL(); // returned url is not what it should be
// version 2 - I want to handle redirects
URL url = new URL("http://shar.es/cISmv");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setInstanceFollowRedirects(false);
con.getResponseCode();
String loc = con.getHeaderField("Location");
// here is the problem, loc is not initialized with a correct url
// returned String corresponds to url returned in version 1
들으을
올바른 문자 세트 인코딩을 사용하십시오. 게시 한 첫 번째 링크는 iso 8859-1에 인코딩되어 있고 두 번째 링크는 유니 코드로 인코딩되어있을 것입니다. – Twilite
안녕하세요. 의견을 남기려면 쓰세요. 나는 그 질문을 약간 분명하게했다.기본적으로 내 문제는 자바와 웹 브라우저에서 동일한 사이트에 액세스하려고 할 때 다른 리다이렉션 결과를 얻는다는 것입니다. 나는이 문제가 문자 인코딩일지도 모른다고 생각했지만, 어떤 인코딩이 사용되었는지 어떻게 알 수 있습니까? 어떻게 설정합니까? – Caldur