URI의 쿼리 문자열 부분에 공백 (')이있을 때 URLConnection.getInputStream()에 관한 정말 기괴한 문제가 있습니다. 구체적으로 말하자면, 작동하는 URL 하나와 그렇지 않은 URL이 있습니다.URLConnection.getInputStream()의 URL을 이스케이프 처리하는 적절한 방법은 무엇입니까?
작업 URL : http://minneapolis.craigslist.ca/search/sss?catAbb=sss&query=iPhone+sprint&sort=date&srchType=A&format=rss 실패 URL (아래 제외) : http://winnipeg.en.craigslist.ca/search/sss?catAbb=sss&query=iPhone 질주 두 & 종류 = 날짜 & srchType = 인덱스 67에서 쿼리에 "잘못된 문자 : http://winnipeg.craigslist.ca/search/sss?catAbb=sss&query=iPhone+sprint&sort=date&srchType=A&format=rss
conn.getInputStream()는 IO 예외가 발생합니다 A & format = rss "
openConnection은 'URL'이 있어야 할 것으로 기대 했으므로 '+'로 이미 대체 된 공간을 확보 할 수 없습니다. '% 20'은 (는) 같은 결과를 나타냅니다.
또한 URL.toString()은 위에서 인쇄 한대로 URL을보고합니다. '+'는 공백이 아닙니다.
코드는 다음과 같습니다. searchUrl은 'URL'인스턴스입니다.
URLConnection conn = null;
conn = searchUrl.openConnection();
conn.setConnectTimeout(CONNECT_TIMEOUT);
conn.setUseCaches(true);
conn.setAllowUserInteraction(false);
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
InputStream istream = conn.getInputStream();
int numBytesRead, numBytesWritten = 0;
byte[] buffer = new byte[8 * 1024];
while ((numBytesRead = istream.read(buffer, 0, 8 * 1024)) > 0) {
oStream.write(buffer, numBytesWritten, numBytesRead);
numBytesWritten += numBytesRead;
}
어디에서이 문제를 해결할 계획이 있습니까? URLConnection을 투구하고 다른 경로로 이동하려고합니다. ...
감사합니다. Kenny.
나는 당신이 당신의 질문에 실수를했다고 생각합니다. URL은 모두 "iPhone Sprint"를 검색하지만 오류 메시지는 URL이 "iPhone sprint two"라고 표시합니다. ** 실제 ** URL 및 ** 실제 ** 오류 메시지로 질문을 수정하십시오. –
""이 원래 인코딩 된 URL이 아닌 리디렉션 URL에있는 문제가 숨겨졌습니다. 리디렉션을 가로 채고 결과에 매개 변수를 인코딩했습니다. 그래서 본질적으로 문제는 내가 부적절한 리다이렉션을 만드는 것에 접근하고있는 웹 사이트에 있었다. – Kenny