XML 통신

1.ASP.NET XML 전송 후 응답받기





 
1
2
3
4
5
6
7
8
9
10
11
        public ActionResult PostTest()
        {
            XmlDocument xmlObj = new XmlDocument();
            string xmlStr = "<Send><UserName>Colt</UserName><PassWord>Taylor</PassWord><Data>100</Data></Send>";
            xmlObj.LoadXml(xmlStr);
            string reqUrl = "http://hope20603-001-site1.smarterasp.net/xmlreq.asp";
            PostXMLTransaction(reqUrl, xmlObj);
 
            return View();
        }
 
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/// <summary>
        /// xml 통신
        /// </summary>
        /// <param name="xmlDoc"></param>
        /// <returns></returns>
        public static XmlDocument PostXMLTransaction(string v_strURL, XmlDocument v_objXMLDoc)
        {
            XmlDocument XMLResponse = null;
            HttpWebRequest objHttpWebRequest;
            HttpWebResponse objHttpWebResponse = null;
            Stream objRequestStream = null;
            Stream objResponseStream = null;
            XmlTextReader objXMLReader;
 
            objHttpWebRequest = (HttpWebRequest)WebRequest.Create(v_strURL);
 
            try
            {
                
 
                
                byte[] bytes;
                bytes = System.Text.Encoding.ASCII.GetBytes(v_objXMLDoc.InnerXml);
                objHttpWebRequest.Method = "POST";
                objHttpWebRequest.ContentLength = bytes.Length;
                objHttpWebRequest.ContentType = "text/xml; encoding='utf-8'";
                
                objRequestStream = objHttpWebRequest.GetRequestStream();
                objRequestStream.Write(bytes, 0, bytes.Length);
                objRequestStream.Close();
 
                objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();
 
                if (objHttpWebResponse.StatusCode == HttpStatusCode.OK)
                {
                
                    objResponseStream = objHttpWebResponse.GetResponseStream();
                    objXMLReader = new XmlTextReader(objResponseStream);
                    
                    XmlDocument xmldoc = new XmlDocument();
                    xmldoc.Load(objXMLReader);
                    XMLResponse = xmldoc;
                    string response = XMLResponse.InnerText;
                    objXMLReader.Close();
                }
                
                objHttpWebResponse.Close();
            }
            catch (WebException we)
            {
                throw new Exception(we.Message);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                
                objRequestStream.Close();
                objResponseStream.Close();
                objHttpWebResponse.Close();
                
                objXMLReader = null;
                objRequestStream = null;
                objResponseStream = null;
                objHttpWebResponse = null;
                objHttpWebRequest = null;
            }
            
            return XMLResponse;
        }
cs

2. ASP XML데이터 받은 후 리턴

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<%
    Dim xmlDoc
    Dim userName
    set xmlDoc=Server.CreateObject("Microsoft.XMLDOM")
    xmlDoc.async="false"
    xmlDoc.load(Request)
    userName = xmlDoc.documentElement.selectSingleNode("UserName").firstChild.nodeValue
 
 
    response.contenttype="text/xml"
    response.write("<?xml version='1.0' encoding='euc-kr'?>")
    response.write("<booking_info xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>")
    response.write("    <error>[ "& userName &" ] </error>")
    response.write("</booking_info>")
 
 
%>
cs


asp Json 생성

javascript 로 페이지 호출

$.ajax({  
        dataType: "json",  
        url: "getJson.asp",  
        data: "",  
        success: function(data){
            console.log(data);
        },
        error: function(){
            console.log("error");
        }

});

asp로 json 형태의 결과 값 리턴

DB를 활용해서 다양한 값을 리턴 할 수 있습니다.

response.write "{"

    response.write  """docType"":""new"""
    response.write  ",""rowNum"":""10"""

for i =0 to 10 step 1

    response.write  ",""tit"&i&""":""number "&i&""""
    response.write  ",""tit"&i&""":""number "&i&""""

next
response.write "}"

console.log 로 찍어본 결과 화면

 

 

ASP JSON / ASP JSON 출력 / ASP JSON 생성


JSON과 XML을 사용하는데 있어서 서로 장단이 있지만, 많은 내용의 데이터를 전달해야 하는 경우라면

조금 더 속도면에서 유리한 JSON을 사용해 보는것도 좋다.


많은 양의 데이터를 다루는 경우라면 별도 함수를 생성해서 사용해야 겠지만, 

일단! 제대로 JSON이 출력되는지 아래와 같이 확인해볼 수 있다.





1
2
3
4
5
6
7
8
9
10
11
12
13
<%
response.write "{"
 
    response.write  """docType"":""new"""
    response.write  ",""rowNum"":""10"""
 
for i =0 to 10 step 1
 
    response.write  ",""tit"&i&""":""number "&i&""""
    response.write  ",""tit"&i&""":""number "&i&""""
 
next
response.write "}"
%>
 
cs




크롬에서 위 소스로 작성된 페이지를 실행시켜보면 아래와 같이 JSON형태로 출력되는 것을 확인 할 수 있다.





ASP.NET Twitter api 1.1

step 1.

트위터 api를 사용하려면 인증된 아이디가 필요하다.

— 참고 페이지 —
인증 받는 법 : Twitter API v1.1 with OAuth
인증 받는 곳 : 트위터 개발자 페이지

step 2.

트위터 서비스 관련 함수
구글링을 통해 가져온 소스가 다수 포함되어 있으나, 정확한 출처를 기억하지 못해 적지 못하였습니다. 출처 아시는 분은 제보 부탁드려요.

/// <summary>
        /// 트위터 API 접속 ID 등 세팅
        /// </summary>
        public void SetTwitterApi(string _consumerkey, string _consumersecret, string _accesstoken, string _accesssecret)
        {
            this.consumerkey = _consumerkey;
            this.consumersecret = _consumersecret;
            this.accesstoken = _accesstoken;
            this.accesssecret = _accesssecret;
        }

        public DataTable GetTwiter(int cnt)
        {
            #region api 1.1

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("https://api.twitter.com/1.1/statuses/user_timeline.json?user_id=받은 아이디");
            sb.AppendLine("&trim_user=false");
            sb.AppendLine("&count=" + cnt + "");

            //트위터 개발자 사이트에서 얻은 값을 입력.
            string oauthconsumerkey = "";
            string oauthconsumersecret = "";
            string oauthtoken = "";
            string oauthtokensecret = "";

            SetTwitterApi(oauthconsumerkey, oauthconsumersecret, oauthtoken, oauthtokensecret);
            string jsonStrTimeline = GetTwitterData(sb.ToString());
            JsonTextParser parser = new JsonTextParser();
            JsonArrayCollection jArr = parser.Parse(jsonStrTimeline) as JsonArrayCollection;

            dt.Columns.Add(new DataColumn("ID", typeof(string)));                               // 트위터 글번호
            dt.Columns.Add(new DataColumn("TEXT", typeof(string)));                             // 트위터 내용
            dt.Columns.Add(new DataColumn("CREATED_AT", typeof(string)));                       // 작성일자
            dt.Columns.Add(new DataColumn("PROFILE_IMAGE_URL", typeof(string)));                // 프로파일 이미지

            DataRow dr = null;
            foreach (JsonCollection twit in jArr)
            {
                dr = dt.NewRow();
                dr[0] = twit[2].GetValue();
                dr[1] = twit[3].GetValue();
                dr[2] = twit[0].GetValue();
                JsonObjectCollection user = twit[11] as JsonObjectCollection;
                dr[3] = user[27].GetValue();
                dt.Rows.Add(dr);
            }

            #endregion

            return dt;
        }

        #endregion

        #region [   트위터 서비스 관련 함수   ]

        private string EncodeCharacters(string data)
        {
            //as per OAuth Core 1.0 Characters in the unreserved character set MUST NOT be encoded
            //unreserved = ALPHA, DIGIT, '-', '.', '_', '~'
            if (data.Contains("!"))
                data = data.Replace("!", "%21");
            if (data.Contains("'"))
                data = data.Replace("'", "%27");
            if (data.Contains("("))
                data = data.Replace("(", "%28");
            if (data.Contains(")"))
                data = data.Replace(")", "%29");
            if (data.Contains("*"))
                data = data.Replace("*", "%2A");
            if (data.Contains(","))
                data = data.Replace(",", "%2C");

            return data;
        }  

        //this gets the json data from twitter api
        public string GetTwitterData(string resourceurl)
        {
            //create parameter list
            List<string> parameterlist;
            //check for query string
            if (resourceurl.Contains("?"))
            {
                parameterlist = getparameterlistfromurl(resourceurl);
                resourceurl = resourceurl.Substring(0, resourceurl.IndexOf('?'));
            }

            else
            {
                parameterlist = null;
            }
            //build the oauth header
            string authheader = buildheader(resourceurl, parameterlist);

            //make the request to the twitter api and get the JSON response
            string jsonresponse = TwitterWebRequest(resourceurl, authheader, parameterlist);

            return jsonresponse;


        }

        //retreive a list if parameters from the resource url. This will be used when making the request to the twitter api and in generating the signature
        private List<string> getparameterlistfromurl(string resourceurl)
        {

            //Uri MyUrl = new Uri(resourceurl);
            string querystring = resourceurl.Substring(resourceurl.IndexOf('?') + 1);

            List<string> listtoreturn = new List<string>();

            NameValueCollection nv = HttpUtility.ParseQueryString(querystring);

            foreach (string parameter in nv)
            {
                listtoreturn.Add(parameter + "=" + Uri.EscapeDataString(nv[parameter].ToString()));

            }
            return listtoreturn;
        }



        //this gets the timeline data from twitter api
        private string buildheader(string resourceurl, List<string> parameterlist)
        {

            string nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString()));
            TimeSpan timespan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
            string timestamp = Convert.ToInt64(timespan.TotalSeconds).ToString();

            string signature = getSignature(nonce, timestamp, resourceurl, parameterlist);

            // build the authentication header with all information collected

            var HeaderFormat = "OAuth " +
            "oauth_consumer_key=\"{0}\", " +
            "oauth_nonce=\"{1}\", " +
            "oauth_signature=\"{2}\", " +
            "oauth_signature_method=\"{3}\", " +
            "oauth_timestamp=\"{4}\", " +
            "oauth_token=\"{5}\", " +
            "oauth_version=\"{6}\"";

            string authHeader = string.Format(HeaderFormat,
            Uri.EscapeDataString(consumerkey),
            Uri.EscapeDataString(nonce),
            Uri.EscapeDataString(signature),
            Uri.EscapeDataString(signaturemethod),
            Uri.EscapeDataString(timestamp),
            Uri.EscapeDataString(accesstoken),
            Uri.EscapeDataString(version)
            );

            return authHeader;

        }



        private string getSignature(string nonce, string timestamp, string resourceurl, List<string> parameterlist)
        {
            // generate the base string for the signature

            string baseString = generatebasestring(nonce, timestamp, resourceurl, parameterlist);

            baseString = string.Concat("GET&", Uri.EscapeDataString(resourceurl), "&", Uri.EscapeDataString(baseString));


            // generate the signature using the base string, consumer secret and access secret from the application api. Using the HMAC-SHA1 signature method

            var signingKey = string.Concat(Uri.EscapeDataString(consumersecret), "&", Uri.EscapeDataString(accesssecret));
            string signature;

            //generate hash using signing key
            HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(signingKey));

            signature = Convert.ToBase64String(hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString)));
            //get signature signature using the hash

            return signature;

        }

        private string generatebasestring(string nonce, string timestamp, string resourceurl, List<string> parameterlist)
        {

            string basestring = "";
            //create list with all the security parameters
            List<string> baseformat = new List<string>();
            baseformat.Add("oauth_consumer_key=" + consumerkey);
            baseformat.Add("oauth_nonce=" + nonce);
            baseformat.Add("oauth_signature_method=" + signaturemethod);
            baseformat.Add("oauth_timestamp=" + timestamp);
            baseformat.Add("oauth_token=" + accesstoken);
            baseformat.Add("oauth_version=" + version);


            //append parameter list as twitter requires the parameters to be in alphabetical order
            if (parameterlist != null)
            {
                baseformat.AddRange(parameterlist);

            }
            //sort list alphabetically
            baseformat.Sort();


            //loop through list and generate base string

            foreach (string value in baseformat)
            {
                basestring += value + "&";
            }

            basestring = basestring.TrimEnd('&');

            return basestring;


        }

        //makes the request to twitter and returns a string of JSON data

        private string TwitterWebRequest(string resourceurl, string authheader, List<string> parameterlist)
        {

            //build  the http web request to the twitter api
            ServicePointManager.Expect100Continue = false;

            string postBody;

            if (parameterlist != null)
            {
                postBody = GetPostBody(parameterlist);
            }
            else
            {
                postBody = "";
            }
            resourceurl += "?" + postBody;



            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resourceurl);
            request.Headers.Add("Authorization", authheader);
            request.Method = "GET";
            request.ContentType = "application/x-www-form-urlencoded";

            // Retrieve the response json data
            WebResponse response = request.GetResponse();

            //json reponse data
            string responseData = new StreamReader(response.GetResponseStream()).ReadToEnd();

            return responseData;

        }

        private string GetPostBody(List<string> parameterlist)
        {
            string stringtoreturn = "";

            foreach (string item in parameterlist)
            {
                stringtoreturn += item + "&";

            }
            stringtoreturn = stringtoreturn.TrimEnd('&');
            return stringtoreturn;

        }

        #endregion

위 소스 중 아래 부분은 System.Net.Json.dll 파일이 추가 되어야 함.

JSON for.NET Download

JsonTextParser = new JsonTextParser();
JsonArrayCollenction = parser.Parse(jsonStrTimeline) as JsonArrayCollection;

+ Recent posts