2009-10-10 2 views
1

웹 사이트에 연결하고 HTML을 반환하는 Java 프로그램을 작성 중이므로 어떤 이유로이 서비스에 문제가 있습니다. 내가왜 웹 사이트의 홈페이지 만 HTML을 얻을 수 있습니까?

//example  String host = "www.google.com" 

을 할 경우 지금은 단지 웹 사이트에 액세스 할 수 있어요하지만 난 더 이상 복잡한 URL을 액세스하려면 그때를 가지는 UnknownHostException를 얻을. 처음에는 URL의 특정 문자를 인식하지 못하는 것과 관련이 있다고 생각했지만 확실하지 않았습니다. 예를 들어, 여기에 액세스하려고하는 URL 중 하나가 있습니다.

host ="http://www.cyberspacei.com/englishwiz/library/name/etymology_of_first_names.htm"; 
int port = 80; 
Socket s = new Socket(host,port) 

.... 등

및 IT를 가지는 UnknownHostException하지만 아무것도 반환 실 거예요.

누군가 나를 도와주세요 !!!

답변

2

나는 자바의 분야에서 전문가는 아니지만 무엇이 잘못되었는지 알고있다.

먼저 호스트 변수에는 URL 호스트 만 있어야합니다.

의 URL http://www.cyberspacei.com/englishwiz/library/name/etymology_of_first_names.htm의 호스트는

'cyberspacei.com' 그래서 당신이 다음 호스트에 연결 당신이 찾고있는 페이지를 요청하는 HTTP 헤더를 보내 사실입니다.

GET /englishwiz/library/name/etymology_of_first_names.htm HTTP/1.0 
Host: cyberspacei.com 
Accept: */* 
Connection: Close 

일부 웹 페이지가 작동 User-Agent 또는 Referer 헤더를해야 할 수도 있습니다. 필드를 적절하게 추가하십시오.

+0

감사합니다.이 답변은 매우 도움이되었습니다. 몇 분 안에 문제를 해결할 수있었습니다 ... 도움을 주셔서 감사합니다. – TheJediCowboy

+0

전혀 문제가 없습니다 ^^ – mauris

5
당신이 호스트 이름에 대해 질문되고 있기 때문에 실패

, 당신은 당신이 그 URL에서 문서를 원한다면, 당신은 URL 클래스에게의

URL url = new URL("http://www.thesite.com/thefile.html"); 
Object doc = url.getContent(); 

를 사용해야 입력하는 것과 같은 아닌 URL 물론 "Object doc"을 해당 내용을 캐시 할 수있는 파일로 대체해야합니다.

4

Socket 개체의 "host"매개 변수는 네트워크 (인터넷)에 연결할 컴퓨터를 지정합니다. 이는 프로토콜, 서버 및 요청되는 파일이나 객체의 디렉토리 구조를 포함하는 웹 브라우저에서 사용되는 URI와는 다릅니다.

소켓 s = 새로운 소켓 ("www.cyberspacei.com", "80"); 해당 컴퓨터에서 실행중인 웹 서버에 새로운 원시 소켓을 열지 만 그 소켓을 통해 HTTP 프로토콜을 협상하고 "/englishwiz/library/name/etymology_of_first_names.htm"을 요청할 것입니다.

HTTP 스트림에 원시 액세스가 필요하지 않는 한 http 협상을 통해 많은 작업을 수행하는 HttpClient와 같은 라이브러리를 사용하여 두통을 겪을 수 있습니다.

http://hc.apache.org/httpclient-3.x/index.html

1

@ONi가 바로 여기 있습니다. Socket() 클래스를 사용하고 있습니다. 즉, 원시 소켓을 사용하고 있으며 HTTP/웹 서버 요청을 직접 작성하려고합니다. 이 클래스는 HTTP 요청을 '이해'하고 웹 사이트의 콘텐츠 만 제공하기 때문에 URL 클래스와 비슷한 것을 원합니다.

& 컴퓨터에서 보낸 이메일을 읽는 것 (URL 클래스)과 입안에 이더넷 코드를 붙이고 혀로 신호를 해독하려고하는 것과는 차이가 있습니다. Socket() 클래스는 수행중인 작업에 비해 너무 낮은 수준입니다.