vb 또는 asp에서 다른 웹페이지를 호출하고 싶어질때가 있다.
물론 C#과 같은 언어는 httpRequest 와 같은 객체가 있어 손쉽게 받을수 있지만
vb or asp에서는 WinHttp.WinHttpRequest.5.1 의 객체를 생성하여 사용할수 있다.

GET 방식으로 페이지를 호출할경우

Function getSiteSourceGet( siteURL, params )
 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "GET", siteURL & "?" & params, False
 
 httpObj.Send()
 httpObj.WaitForResponse
 If httpObj.Status = "200" Then
  getSiteSourceGet = httpObj.ResponseText
 Else
  getSiteSourceGet = null
 End If
End Function



 

POST 방식으로 페이지를 호출할 경우

Function getSiteSourcePost( siteURL, params )
 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "POST" , siteURL, False
 httpObj.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
 '포스트 방식시 위의 라인을 추가해 주어야 한다.
 
 httpObj.Send params
 '포스트의 파라미터는 Send 호출시 같이 값을 넘겨 주어야 한다.
 httpObj.WaitForResponse
 If httpObj.Status = "200" Then
  getSiteSourcePost = httpObj.ResponseText
 Else
  getSiteSourcePost = null
 End If
End Function



POST를 이용할시 약간 수정행 주어야 할것이 있는데 Content-Type을 위와 같이 변경해주어야 하며 파라미터를 GET방식과는 다르게 Send 시 값을 넘겨주어야 파라미터값들이 전달되다.

위와 같이 함수를 만들어 사용하면 될것이다.

추가된글 파라미터를 넘길때 GET 방식이던 POST 방식이던 URLEncode 를 해주어야 한다. 그것때문에 한참 헤맸다. 그리고 VB Script로 호출시에는 Server 객체를 사용할수 없음으로 URLEncode 함수를 직접 만들어 사용해야 했다. URLEncode 함수는 쉽게 구할수 있다.

비교 3번째네요. 제가 저번 프로젝트때 가장 기초적인 것임에도 불고 하고 제일 혼란해 했던.... 저혼자서 끙끙 앓다가 결국 물어봐서 해결본 것이에요. 그래서 물어보기 전까지 혼자서 생쑈를 했죠. ^^ 일단 코드를 보자구요.

C#코드
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;>
class HttpClientGet
{
    static void Main(string[] args)
    {
        HttpWebRequest wReq =
            (HttpWebRequest)WebRequest.Create(@"http://hahakbs.dothost.co.kr/reqTest.php?input=123256");
        wReq.UserAgent = ".NET Framwork Example Client";
        HttpWebResponse wResp = (HttpWebResponse)wReq.GetResponse();
        Stream respStream = wResp.GetResponseStream();
        StreamReader reader = new StreamReader(respStream, Encoding.Default);
        while (reader.Peek() >= 0)
        {
            String str = reader.ReadLine();
            Console.WriteLine(str);
            if (str.Equals("Y"))
                Console.WriteLine("Get Y");
            else
                Console.WriteLine("Get else");
        }
    }
}



 

결과
N
Get else



 

자바코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpRequest {
 public static void main(String[] args)
  throws MalformedURLException, IOException {
  HttpURLConnection connection =
   (HttpURLConnection) new URL("http://hahakbs.dothost.co.kr/reqTest.php?input=123456").openConnection();
 
  BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
  String line;
  while ((line = in.readLine()) != null){
   System.out.println(line);
   
   if(line.equals("Y")) {
    System.out.println("Get Y");
   } else {
    System.out.println("Get else");
   }
  }
 }
}


 

결과
Y
Get Y



위의 예제는 간단하다. 미리 만들어 놓은 사이트에 input에 값을 Request한다. 그리고 그 것에 대한 값을 Stream 형태롤 받아서 그 값을 출력한다. input의 값은 123456 일 경우는 Y라는 문자열을 그 외의 경우에는 N이라는 문자열을 보낸다.

뭐 두개의 프로그램상 별다른 차이점은 그다지 없다. C#에서는 HttpWebRequset 객체를 생성하고 그 객체에서 리스폰스를 받아 스트림 버퍼로 읽고 그 읽은 값을 뿌려주고 비교해주고, 자바에서는 HttpURLConnection 객체를 URL객체의 커넥션으로 생성해 그 값을 버퍼 리더로 읽어서 뿌려준다.

자바쪽은 따로 Request나 Response 객체를 둔것이 아니라, Connection 객체를 두어 사용함으로서 조금더 간편하다고 할수 있을것이다. 그리고 어차피 읽어오는 응답텍스트 들은 각각의 스트림객체를 통해 읽어오는것은 비슷하다 할수 있겠다.

위처럼 간단한 것을 하기 위해 한참을 몰랐다가 알았을 때는 정말 한심했다. ^^ 물론 C#이 아니라 자바쪽을.... 왠지 자바쪽은 쉽게 접해지지 않는것 같다. 역시 MS쪽에 길들어 져서.

그런데 제일 혼란 스러웠던 것은 저것이 그냥 콘솔이 아니라, 웹 상에서 했기 때문이기도 하다. 요구점은 이것이였다. 웹 서비스에서 유저가 접속을 해서 내 페이지에서 숫자를 입력 하면, 그 결가 데이터가 자체 웹서버의 DB나 파일에 있는게 아니라 다른 웹에 입력값을 전송하고, 그 전송값에 대한 결과 값을 받아서 처리하는.. 그래서 감을 잡기가 힘들었던거 같다.


div>