본문 바로가기
응용프로그래밍

vb에서 웹페이지 소스를 읽는 방법 - 소스첨부

by 세이박스 2008. 10. 19.
반응형
인터넷상에 웹페이지를 다운받는 과정을 설명하도록 하지요..
 
만약, 일반적인 인터넷 익스프롤러를 이용했을 때에는,
 
1. 사용자가 주소창에 http://terzeron.net/lyr.....어쩌구.... 라고 입력을 하거나, 그러한 링크를 누릅니다.
 
2. 웹 브라우저는 인터넷상으로 terzeron.net 라는 컴퓨터를 찾아 접속한 후, 해당 페이지를 보내달라고 요청합니다.
 
3. terzeron.net라는 컴퓨터는 요청을 받아들이고 html소스를 웹 브라우져에 보내줍니다.
 
4. 웹 브라우져는 html소스를 사용자가 볼 수 있게 구성하여 화면에 보여줍니다.
 
 
 
이 4단계는 이해가 가시죠?
 
그런데, 2번 과정에서 해당 원격 컴퓨터(웹 서버라 부르죠)에게 페이지를 요청할 때에는
 
규정상 자신의 정보도 같이 보내도록 되어 있습니다.
 
그것을 요청헤더라고 하며,
 
자신의 IP주소, 브라우져 버젼, 운영체제 버젼, 언어설정(지역), 등등을 보내주죠
 
익스프롤러의 경우에는 브라우져 버전을 "익스프롤러 6.0" 이런식으로 보내겠지요..
 
 
 
이런 요청해더는 국제규격으로 정해져 있기 때문에
 
Inet컨트롤 역시 요청헤더를 보내도록 되어 있지요.
 
그런데 Inet컨트롤의 경우에는 요청헤더에다가 너무 솔찍하게 자신을 밝히는게 문제죠.
 
자신의 브라우져 버젼을 "인터넷 전송 컨트롤" 이런식으로 너무 티나게 보내버립니다.
 
 
 
그래서 가끔, 특별한 원격컴퓨터는 이 요청헤더를 보고,
 
마음에 들지 않으면 에러메시지를 보내버리는 경우도 있습니다.
 
위의 웹 페이지 역시 그런 기능이 있는것 같네요.....
 
 
 
이것을 해결하려면 몇가지 방법이 있겠는데요...
 
바로 소켓통신 수준에서 세밀하게 제어해 버리는 것입니다.
 
물론 이것의 의미는 인터넷 익스프롤러와 같이 아주 복잡한 처리과정을
 
직접 다 구현해야 한다는 의미이지요..
 
매우 까다로운 일이 될수 있습니다.
 
그러나 저러한 요청 헤더 역시 마음대로 수정할 수 있기 때문에,
 
거의 모든 웹 서버의 차단장치를 뚫을수 있습니다.
 
 
 
그리고 두번째의 좀더 쉬운 방법이 있는데요....
 
Inet컨트롤 말고, WebBrowser 이라는 컨트롤이 있습니다.
 
이것은 Inet보다 훨 강력한데요...
 
원래의 주 목적은 폼 위에 인터넷 익스프롤러를 통체로 삽입하는 기능이죠..
 
어찌되었건 이녀석은 요청 헤더에다가 '익스프롤러' 라고 찍어서 보내기 때문에
 
위의 방법으로 차단되지 않습니다.
 
 
그런데 문제는 이것은 어디까지나 웹페이지를 '보기' 위한 컨트롤이지,
 
'html 소스'를 다운받지는 못하죠..
 
그래서 편법으로 다운받는데요.. 그것이 100% 신뢰할수는 없으나...
 
그럭저럭 쓸만은 합니다.
 
위의 소켓 통신을 구현하는것 보다는 훨씬 나은 선택이 되실겁니다.
 
 
방법은 Inet와 비슷한데요...
 
아마 Inet컨트롤을 사용하기 위해서 구성요소 관리자에서
 
Microsoft Internat Transfer Control 6.0 을 선택하셨을 텐데요.
 
그 바로 위에 있는
 
Microsoft Internat Control 6.0 이게 바로 그겁니다.
 
이걸 선택하시고, 컨트롤을 Inet처럼 아무데나 조그맣게 그리세요.
 
그리고 다음과 같이 코딩합니다.
 
Dim url_Temp As String
Private Sub Form_Activate()
    url_Temp = "http://terzeron.net/lyrics/search.php?m_cat=1&s_cat=1&language=&musician=Chris Cornell&key=29384023&noaccess=1&song=Angel On Fire"
    WebBrowser1.Navigate url_Temp
End Sub
 
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    Dim i As Long
   
    Do Until Not Result = ""
        Result = WebBrowser1.Document.All(i).outerHTML
        i = i + 1
    Loop
   
    Text1.Text = Result
End Sub
반응형