Unipass 사이트 이용하여 데이터 조회 및 처리 관련건

Unipass 사이트를 이용하여 처리하는 프로세스 개발시 참고하세요.

Unipass 사이트가 API를 제공할 계획이 있지만 전체 기능이 아닙니다. 처리시 사이트를 브라우징 하면서 처리하면 속도가 많이 느립니다. 그렇다고 HttpRequest 액티비티를 사용해서 처리하려니 세션 문제가 걸립니다. 그래서 간단하게 코드를 작성했습니다.

아래 코드에서 핵심은 CookieContainer을 공유하는 것입니다.
사이트 구조가 각 메뉴별로 selectedId 라는 값을 가집니다.
그리고 해당 메뉴 이동하면 savedToken 값을 생성하게 됩니다.
이값을 읽어와 실제 작업을 하게 됩니다.
크롬이나 edge에서 개발자 툴로 확인하시면 됩니다.
참고하세요.

image
image
image

소스코드(중복 되는 코드를 함수화 하여 처리해야 되나 보기쉽게 나열하였음)
'변수 선언
Dim url As String = String.Empty
Dim parameter As String = String .Empty
Dim token As String = String.Empty
Dim xpath As String = “//input[@class=‘savedtoken’ and @name != ‘savedToken’]”
Dim request As HttpWebRequest
Dim byteArray As Byte()
Dim dataStream As Stream
Dim cookie As CookieContainer
Dim response As WebResponse

'Menu 이동 및 Token 읽어오기
url = “https://unipass.customs.go.kr/csp/myc/mainmt/MainMtCtr/menuExec.do
Console.WriteLine("Access :: " + url)
parameter = “selectedId=MYC_MNU_00000394”

Console.WriteLine("Parameter :: " + parameter)
request = CType(WebRequest.Create(url),HttpWebRequest)
'Cookie Container : 세션 처리용 생성
cookie = New CookieContainer()

request.CookieContainer = cookie
request.Accept = “/
request.UserAgent = “http_requester/0.1”
request.Timeout = 60000
request.Method = “POST”
request.ContentType = “application/x-www-form-urlencoded”
byteArray = Encoding.UTF8.GetBytes(parameter)
request.ContentLength = byteArray.Length
dataStream = request.GetRequestStream()
dataStream.Write(byteArray, 0 , byteArray.Length)
dataStream.Close()
’ Response
response = request.GetResponse()
Console.WriteLine(CType(response,HttpWebResponse).StatusDescription)
Using responseStream As stream = response.GetResponseStream()
Dim reader As StreamReader = New StreamReader(responseStream)
Dim responseFromServer As String = reader.ReadToEnd()
Dim document As HtmlDocument = New HtmlDocument()
document.LoadHtml(responseFromServer)
Dim node As HtmlNode = document.DocumentNode.SelectSingleNode(xpath)
token = node.GetAttributeValue(“value”,"").Trim
Console.WriteLine(token)
End Using

'Target 이동 및 JSON 가져오기
url = “https://unipass.customs.go.kr/csp/myc/bsopspptinfo/csclinfo/ExpFfmnBrkdCbnoQryCtr/retrieveExpFfmnBrkdCbno.do
Console.WriteLine("Access :: " + url)
parameter = “dclrStrDttm={0}&dclrEndDttm={1}&qryCondTp=1&cbno={2}&listFile=&MYC0404003Q_F1_savedToken={3}&savedToken=MYC0404003Q_F1_savedToken&firstIndex=0&recordCountPerPage=10”
parameter = String.Format(parameter,date1,date2,cbno,token)
Console.WriteLine("Parameter :: " + parameter)
request = CType(WebRequest.Create(url),HttpWebRequest)
request.CookieContainer = cookie
request.Accept = “/
request.UserAgent = “http_requester/0.1”
request.Timeout = 60000
request.Method = “POST”
request.ContentType = “application/x-www-form-urlencoded”
byteArray = Encoding.UTF8.GetBytes(parameter)
request.ContentLength = byteArray.Length
dataStream = request.GetRequestStream()
dataStream.Write(byteArray, 0 , byteArray.Length)
dataStream.Close()
'Cookie Container : 세션 처리용 기존 cookie 사용
’ Response
response = request.GetResponse()
Console.WriteLine(CType(response,HttpWebResponse).StatusDescription)
Using responseStream As stream = response.GetResponseStream()
Dim reader As StreamReader = New StreamReader(responseStream)
resultJson = reader.ReadToEnd()
Console.WriteLine(resultJson)
End Using

1 Like

람다 Function을 이용하여 함수 형태로 만들었습니다.
HttpRequest 액티비티를 사용해서 처리 하기 힘든 부분에 적용해 보니 잘동작하네요.


image

2 Likes