2012-06-15 3 views
1

설명 : webcrawler 프레임 워크와이 프레임 워크를 구현하는 독립 모듈이 있습니다. 이 모든 모듈은 뉴스 관련 웹 사이트의 뉴스를 수집합니다.자세한 내용이 부족한 IOException - 403 오류

프레임 워크에는 IOException 및 SocketTimeoutException과 같은 두 가지 예기치 않은 오류가 있습니다. 분명한 이유 (웹 사이트가 오프라인 일 수도 있고 유지 보수 중일 수도 있음)

사실 : 특정 웹 사이트 (THIS one) 항상 임의 IO 예외가 발생합니다. 나는 그것을 예측하려했지만, 왜 아직도이 오류가 발생하는지 알지 못합니다.

나는 테스트 단계에서 요청으로 폭탄을 터뜨린 것이라고 생각했다. 그것은 2 일 또는 3 일 안에 다른 요청을 보내지 않아도 여전히 오류가 나옵니다. 간단히 말해서

:이 사이트는 인증이 필요하지 않으며, 그것은 무작위로 (403)가 서로 다른 여러 오류가있을 수 있기 때문에 403 무작위로

, 내 응용 프로그램과 특정 문제가 무엇인지보고 싶다 던졌습니다 .

내가 403을 얻을 수 있다면, 나는 그 주위를 시도하고 해결할 수 있습니다. (403.1, 403.2, ..., 403.n)

//If you guys want the code, it's a basic Jsoup get. 
//(I have also tried it with native API, 
//and still get the same random 403 errors) 

//Note that I also tried it with no redirection, and still get the error 
Document doc = Jsoup 
    .connect("http://www.agoramt.com.br/") 
    .timeout(60000) 
    .followRedirects(true) 
    .get(); 

//You may criticize about the code. But this specific line is the one 
//that throws the error. And it doesn't randomly do that to other 3k 
//site connections. That's why I want to get the specifics from the 403 
+0

403은 액세스가 금지되어 있음을 의미합니다. 왜 더 많은 이유가 필요합니까? – erickson

+0

그렇다면이 오류가 무작위로 왜 발생합니까? –

+0

아, 알겠습니다. 문제는 * 랜덤입니다. * 똑같은 URL을 원하십니까? 제 시간에 클러스터링이 보이십니까? 다른 소스 IP 주소에서 크롤링을 시도 했습니까? 더 좋은 점은 완전히 다른 넷 블록입니까? – erickson

답변

3

서버가 불편을 겪고 403을 반환 할 수 있습니다. 서버가 당신을 들여 보내지 않기를 바랄 경우를 제외하고는이 문제를 해결할 것으로 예상되지 않습니다. 서버가 제공 한 세부 정보는 응답 본문을 읽으려고 시도 할 수도 있지만 그게 전부입니다. 403. n 오류 코드는 입니다. IIS 특정 기능이며 내가 지적한 사이트가 nginx과 함께 제공되는 것으로 보이므로이를 얻지 못할 수도 있습니다. 당신의 webcrawler이 무작위로가 (동일한 IP에서) 403 만 일반 웹 브라우저를 얻을 수 는 403 그럼 내가 제안 수있는 최선은 당신이 만드는입니다 도착하지 않을 경우

당신의 webcrawler 요청 헤더는 정확히 같은 모습 일반 웹 브라우저가 보내는 것. 폴 라이트 방식 웹 크롤러의 올바른 작동 여부는 다른 논의입니다.

0

문제가있을 수 있습니다 무엇, 당신이 당신의 프로그램이 사이트에있는 모든 파일을 읽고 싶어 얻을 수있는 폴더 있다는 것입니다, 그러나 웹 서버는 403 에러를 주며 아마도 소켓을 죽일 것입니다. 이것은 코드 없이는 프로그래밍상의 오류 또는 웹 서버의 구성만을 말할 수 없다는 생각입니다.

+2

저는 403이 무엇인지 압니다. 그리고 나는 그 질문에서 설명했다. 403을 무작위로 던져서 예측할 수는 없습니다. 웹 사이트는 뉴스를 표시하기 위해 로그인 할 필요가 없기 때문에 인증 문제도 아닙니다. –

0

사이트에서 인터넷 연결에 결함이있을 수 있으며 스파이더를 중지하려고 시도하는 코드가있을 수 있습니다. 도중에 이상한 프록시 서버가있을 수 있습니다.

0

어쩌면 (index.html을 .. 또는 무엇도 사이트의 메인 홈페이지를 등 ..) 마지막에 index.php를 추가하려고

내가 확실하지 오전이 그러나 문제를 해결하는 데 도움이됩니다. 나는 어딘가에있는 Connection 클래스를 사용하는데, 위의 게시물 중 하나가 말한 것처럼 (웹 브라우저의 헤더를 에뮬레이트하므로 말하기 ... 그것은 파이어 폭스에서 오는 것처럼 보이지만 대신 Java 기본값)입니다.

나는 그것이 가치가 있다고 생각한다.

1

웹 크롤러의 디자인에서 예기치 않은 중단 및 오류 코드가 고려되어야합니다.

마지막으로 실패한 사이트의 큐를 유지하면 일정 기간 후에 웹 크롤러가 요청을 다시 시도 할 수 있습니다.

0

다른 사람들이 말한 것을 피기 백하려면 크롤러를 네트워크 스캐너 또는 침투 도구로 인식하고 처리 할 수 ​​있습니까?

0

Jsoup이 무엇인지는 거의 알지 못하지만, HttpURLConnection.getErrorStream()을 읽어 보시기 바랍니다. 이 방법을 사용하면 오류 문서를 읽을 수 있습니다. 오류 필드의 헤더 필드에 대한 액세스는 연결이 실패한 후에도 가능하며 일반적으로 헤더 필드에 액세스하는 방식입니다. 함께,이 두 가지 (본문 및 헤더)는 서버가 제공하는 모든 정보를 제공합니다.