2010-01-14 4 views
3

웹 사이트에서 HTML 페이지를 다운로드하고 로컬 시스템에 파일을 저장하는 Java 응용 프로그램을 구축 중입니다. 브라우저를 통해 웹 페이지의 URL에 수동으로 액세스 할 수 있습니다. 그러나 Java 프로그램에서 동일한 URL에 액세스하려고하면 서버가 503 오류를 반환합니다.Java 프로그램에서 URL에 액세스하는 중 HTTP 503 오류가 발생합니다.

샘플 URL = 브라우저를 통해 위의 URL에 액세스 할 수 http://content.somesite.com/demo/somepage.asp

: 여기에 시나리오입니다.

StringBuffer data = new StringBuffer(); 
BufferedReader br = null; 
try { 
    br = new BufferedReader(new InputStreamReader(sourceUrl.openStream())); 
    String inputLine = ""; 
    while ((inputLine = br.readLine()) != null) { 
     data.append(inputLine); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    br.close(); 
} 

그래서, 내 질문은 다음과 같습니다 :

  1. 내가 잘못 여기에 아무것도 모르지만, 자바 코드 아래는 페이지를 다운로드하는 데 실패?

  2. 서버가 프로그램/봇의 요청을 차단하고 브라우저의 요청 만 허용 할 수있는 방법이 있습니까?

+1

질문 # 2가가는 한 서버는 'User-Agent' 헤더 또는 누락 된 Referer 헤더를 기반으로 거부하도록 구성 될 수 있습니다. – ZoogieZork

+1

@ZoogieZork : 그게 무슨 일을하는 경우, 그것은 오동작이야. 5xx 오류는 내부 서버 문제에 사용하기위한 것입니다. 봇 거부는 4xx 오류를 반환해야합니다. – skaffman

+0

내가 생각할 수있는 많은 원인이 있습니다 (개인적으로 "잘못된"사용자 에이전트로 인해 발생했다고 생각하지 않습니다. 오히려 4xx 오류를 반환했을 것입니다). 문제의 실제 URL을 게시 할 경우 더 나은 답변을 제공 할 수 있습니다. – BalusC

답변

3

당신은 일반 웹 브라우저를 보낼 것입니다 무슨과 같은에 User-AgentReferer HTTP 헤더를 설정하려고 할 수 있습니다.

이 목록에서 User-Agent 문자열을 선택할 수 있습니다 : Seehowitruns: User-agent strings.

또한 요청한 페이지가 내부 페이지 인 경우 이전 페이지에서 생성 된 쿠키에 따라 달라질 수 있습니다.

+2

그러나이 경우에는 봇이 사이트에 액세스하는 것을 원하지 않을 것입니다. 귀하의 프로그램이 단순한 사적인 용도 이상을위한 것이라면, 귀하는 서비스 조건을 확인해야 할 수도 있습니다. – Thilo

관련 문제