[C#] Web 통신 C# 2011. 8. 19. 17:23

일단 급하게 필요해서 짰는데 누군가 웹 서버 형태를 MIME 규칙에 따닥 하고 맞춰놔서

조금 고생 했다 -_-;;

샘플은 다음과 같다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Web;
namespace WebSocket
{
    class Program
    {
        static void Main()
        {
            try
            {
                Encoding encoding = Encoding.UTF8;
               
                byte[] result = encoding.GetBytes("msg=메세지");
               
                Uri uri = new Uri("url/경로/웹파일");

여기서 부터가 이제 시작이다.
각각의 타입에 맞게 지정하고

                HttpWebRequest wReqFirst = (HttpWebRequest)WebRequest.Create(uri);
                wReqFirst.Method = "POST";
이놈은 PHP에서 해당하는 내용 때문에 맞춘 내역이다.

$_SERVER["HTTP_USER_AGENT"]
$_SERVER["HTTP_TRANS_USER"]
$_SERVER["SCRIPT_FILENAME"]
$_SERVER["HTTP_TRANS_USER"]
$_POST["msg"]
base64_decode($_POST["msg"]
$_SERVER["HTTP_TRANS_KEY"]

이런 내용이 PHP에 적용이 되어 있었다.

처음엔 아무것도 모르고 그냥 Header 형태만 만들어서 날리면 되는 줄 알았는데..

그냥 단순 무식하게 생각한게 잘못이었다.

C#에서는 Header 자체를 자동적으로 만들어서 날리기 때문에 세부 사항만 맞춰서 처리 해 주면 된다.

그 예가 다음이다.

                wReqFirst.UserAgent = "해당 사항";
                wReqFirst.Headers.Add("trans-user", "해당 사항");
                wReqFirst.ContentType = "application/x-www-form-urlencoded";
                wReqFirst.ContentLength = result.Length;
                wReqFirst.Headers.Add("trans-key", "MD5=md5규칙");

여기까지 해 주면 스트림을 열고 날려주면 된다.

                Stream postDataStream = wReqFirst.GetRequestStream();
                postDataStream.Write(result, 0, result.Length);
                postDataStream.Close();

                HttpWebResponse wRespFirst = (HttpWebResponse)wReqFirst.GetResponse();
                Stream respPostStream = wRespFirst.GetResponseStream();
                StreamReader readerPost = new StreamReader(respPostStream, Encoding.UTF8);
                string resultPost = readerPost.ReadToEnd();

여기까지가 웹 서버에 요청한 내용을 담아두고 이 다음은 base64 처리를 해서 나타낸 것이다.

                byte[] conv = Convert.FromBase64String(resultPost);
                UTF8Encoding utf8 = new UTF8Encoding();
                Console.WriteLine(utf8.GetString(conv));
            }
            catch (WebException ex)
            {
            }
        }
    }
}

나름 상큼하게 고민 좀 한거 같다;;

웹 서버 자체에 대해서 차근이 하다보면 다른 방법도 많을 거 같다.

어떻게 구성하냐 그 차이 일 수도 있겠지만..

그럼 간만에 블로깅은 여기까지!!