C#에서 HTTP POST로 JSON 데이터 보내는 방법

회사 업무 중 HTTP POST로 Request Body에 JSON을 넣어서 보내야 할 일이 있어서 간단하게 짜본 WinForm 프로그램이다.

이런 코드들을 간단하면서도 막상 필요할 때 찾아서 쓰기가 귀찮아서 찾아보기 쉽게 여기에 적어둔다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://127.0.0.1:40080/Default.aspx?cmd=2");
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{"kakao_id":"1","image_url":"http://teste11111.com","public_profile":"Y"}";

streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
MessageBox.Show(result);
}
}
}
}
}

 

Falsh Action Script 2.0에서 POST 방식 데이터전달

플래시에서 외부 파일과 통신할 때 쓰이는 방법 중 GET 방식에 이은 POST 방식.

애초 설계부터 GET 방식과 달리 데이터 전송에 더 목적이 있었기 때문에 여러가지 정보를 파라미터로 보낼 수 있다.

단, 이럴 때 LoadVars 객체를 두번 써야하는 번거로움이 생겨난다.

var data_1:LoadVars = new LoadVars(); // 객체 생성
var post_data:LoadVars = new LoadVars(); // 객체 생성

post_data.onLoad = function(success:Boolean) {
     if (success) {
          if (post_data.result == 1) {
               // 돌아온 데이터의 result 값이 1일 때 처리
          } else if (post_data.result == 2) {
               // 돌아온 데이터의 result 값이 2 일 때 처리
          } else {
               // 돌아온 데이터의 result 값이 그 이외일 때 처리
          }
     } else {
          // 데이터를 보내고 다시 되돌아온 수신이 오류일 경우 처리 루틴
     }
};

data_1.param1 = text1; // 넘길 데이터
data_2.param2 = test2; // 넘길 데이터
data_1.sendAndLoad("/post_data_test/test.jsp", post_data, 'POST'); // POST로 전송시작

GET 방식에 비해 LoadVars 객체를 한번 더 생성해야하는지라 코드가 약간 더 길어진다.

파라미터로 계속 지정해나가면 되서 데이터를 정렬하고 관리하는게 좀더 쉬워진다는 장점이 있고 GET과는 다르게 sendAndLoad 명령어를 쓴다는 점 정도만 기억하면 될듯.

특별히 어려운건 없지만 번거롭고 코드가 조금이라도 길어짐과 LoadVars를 두번 쓰다가 헷갈릴 수가 있어 난 사용을 잘 안하지만 프로그래머가 POST 데이터로 받고 싶다고 우긴다면 해줘야하므로 이 방법 역시 알고는 있어야할듯.

Flash Action Script 2.0에서 GET 방식 데이터전달

가끔 개발자들과 연동 작업을 하다보면 플래시에서 어떻게 데이터를 넘겨달라고 지정해줄때가 많은데 그중 GET 방식과 POST 방식이 제일 흔하다.

GET 방식은 쉽게 설명해서 URL에 데이터를 넣어서 보내는 방식.
POST방식은 그렇지 않은;; 방식이다.

GET 방식으로 보내고 받을 때.
LoadVars를 이용해 새 객체를 만들고 OBJECT.load(url) 형식으로 부르면 된다.

var object_name = new LoadVars();
object_name.onLoad = function(success:Boolean) {
     if (success) {
          // 로드가 성공했다면 수행할 동작
          trace(object_name.test_data)
     } else {
          // 로드가 실패했다면 수행할 동작
          trace("Faild")
     }
}
object_name.load("경로/파일명?변수명1=변수1&변수명2=변수2&..........')

GET 방식은 굉장히 유용하게 쓰이고 있다. 일단 URL 뒤에 변수명=변수 식으로만 계속 이어붙여주면 되기 떄문에 다루기도 쉽다. onLoad 명령은 통신을 한후 그 결과를 봐서 제대로 통신했는지를 알수 있다. ‘object_name.변수명’을 이용해서 리턴된 값을 이용해 어떠한 다른 처리를 나누어 할 수도 있다. GET 방식은 애초부터 간단한 정보들만 넘기도록 만들어진 것이라 많은 정보를 처리할 때는 POST로 처리함이 옳지만 URL에 뒤에 변수명=변수 식으로 계속 붙이기만 하면 되니 사용하기가 편해서 굉장히 많이 쓰인다.

URL에 데이터들이 들어가므로 보안상 문제가 좀 있다. 아무리 플래시 내부에서 처리한다하지만 HTTP 패킷을 캡쳐하면 내용이 보인다. (하긴 그건 POST 방식도 매한가지이긴하지만.)

플래시에서 외부파일과 데이터를 주고 받을 때는 반드시 알아야할 방법 중 하나.