크롤러를 만들고 있으며 스트림이 200인지 여부에 관계없이 스트림에서 데이터를 가져와야합니다. CURL은 표준 브라우저뿐 아니라 모든 것을 수행하고 있습니다.URLConnection에서 HTTP 오류 (404,500 등)가있는 데이터에 액세스 할 수 없습니다.
다음은 HTTP 오류 상태 코드와 함께 예외가 발생하는 경우에도 실제로 요청의 내용을 가져 오지 않습니다. 나는 출력을 관계없이 원한다, 거기 방법 있는가? 이 라이브러리는 실제로 지속적 연결을 수행하므로 크롤링 유형에 이상적입니다. 간단한
import java.net.*;
import java.io.*;
public class Test {
public static void main(String[] args) {
//InputStream error = ((HttpURLConnection) connection).getErrorStream();
URL url = null;
URLConnection connection = null;
String inputLine = "";
try {
url = new URL("http://verelo.com/asdfrwdfgdg");
connection = url.openConnection();
DataInputStream inStream = new DataInputStream(connection.getInputStream());
while ((inputLine = inStream.readLine()) != null) {
System.out.println(inputLine);
}
inStream.close();
} catch (MalformedURLException me) {
System.err.println("MalformedURLException: " + me);
} catch (IOException ioe) {
System.err.println("IOException: " + ioe);
InputStream error = ((HttpURLConnection) connection).getErrorStream();
try {
int data = error.read();
while (data != -1) {
//do something with data...
//System.out.println(data);
inputLine = inputLine + (char)data;
data = error.read();
//inputLine = inputLine + (char)data;
}
error.close();
} catch (Exception ex) {
try {
if (error != null) {
error.close();
}
} catch (Exception e) {
}
}
}
System.out.println(inputLine);
}
}
"InputStream is = connection.getResponseMessage();" URLConnection 클래스에서 getResponseMessage 메소드가 표시되지 않습니다.이 메소드는 HttpUrlConnection의 일부이므로, 타입 변환하지 않아야합니까? 아니면 getResponseMessage를 getInputStream으로 대체 할 수 있습니까? 그렇지 않으면 예외가 발생합니까? – David
오타였습니다. 그것은'connection.getInputStream()'입니다. –
아주 좋은 짧은 대답 –