천객만래 [千客萬來] (It has an interminable succession of visitors)

'InternetOpen'에 해당되는 글 2건

  1. 2012.01.27 [개발/API] 웹에 있는 파일크기 알아오기
  2. 2012.01.25 [개발/c++] Send HTTP Post Request
[개발/API] 웹에 있는 파일크기 알아오기


DWORD GetHttpFileSize(LPCTSTR lpszUrl)
{
HINTERNET hInternet,hURL;
TCHAR buffer[32];
DWORD dwSize=32,dwFileSize;

// 인터넷 연결
hInternet=InternetOpen(TEXT(""), INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
if (hInternet == NULL) return -1; // 인터넷 연결이 되지 않았으면 에러 리턴

// URL 오픈
hURL=InternetOpenUrl(hInternet, lpszUrl, NULL, 0, INTERNET_FLAG_TRANSFER_BINARY, 0);

// 오픈에 실패했을 경우 에러 리턴
if (hURL == NULL) { InternetCloseHandle(hInternet); return -1; }

// 핵심 함수인 HttpQueryInfo
HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, buffer, &dwSize, 0);
dwFileSize = _ttoi(buffer);

InternetCloseHandle(hInternet);
InternetCloseHandle(hURL);

return dwFileSize;
}


Posted by SB패밀리
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

Posted by SB패밀리