본문 바로가기
IT-개발,DB

[개발/c++] Send HTTP Post Request

by SB리치퍼슨 2012. 1. 25.
Send HTTP Post Request 
http://support.microsoft.com/kb/165298

WinInet을 사용하여 양식 전송 제대로 시뮬레이션하려면 적절한 콘텐츠 형식을 나타내는 헤더 보내야 합니다. Forms에 대해 올바른 Content-Type 헤더에 있습니다:
Content-Type: application/x-www-form-urlencoded

콘텐츠 형식을 지정하지 않은 경우 대부분의 경우 서버를 적절히 응답하지 않습니다. 
예를 들어, IIS 3.0 Active Server Pages 구성 요소를 실제로 ' application/x-www-form-urlencoded ' 이 
헤더를 특히 폼 변수 "Request.Form" 개체를 추가하기 전에 확인합니다. 
이 MIME/Content-Type 데이터 요청URL-encoded form variables 목록을 나타냅니다. 
공백 문자 (ASCII 32) 로 인코딩된 '+ ', 특수 문자 예: 것을'!' 의미합니다 
URL 인코딩은 '%21' 16진수 형식으로 인코딩된. 

폼 POST 요청을 시뮬레이션하기 위해 MFC WinInet 클래스를 사용하는 코드

CString strHeaders =
      _T("Content-Type: application/x-www-form-urlencoded");
   // URL-encoded form variables -
   // name = "John Doe", userid = "hithere", other = "P&Q"
   CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q");

   CInternetSession session;
   CHttpConnection* pConnection =
      session.GetHttpConnection(_T("ServerNameHere"));
   CHttpFile* pFile =
      pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
                              _T("FormActionHere"));
   BOOL result = pFile->SendRequest(strHeaders,
      (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());

======================================================================
    
MFC 동일한 코드를 직선 SDK 호출하려면 다음과 같이 변환합니다:

   static TCHAR hdrs[] =
      _T("Content-Type: application/x-www-form-urlencoded");
   static TCHAR frmdata[] =
      _T("name=John+Doe&userid=hithere&other=P%26Q");
  static LPSTR accept[2]={"*/*", NULL};

   // for clarity, error-checking has been removed
   HINTERNET hSession = InternetOpen("MyAgent",
      INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
   HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"),
      INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
   HINTERNET hRequest = HttpOpenRequest(hConnect, "POST",
      _T("FormActionHere"), NULL, NULL, accept, 0, 1);
   HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));
   // close any valid internet-handles

반응형

댓글