C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[9085] Re:Re:[질문] TNMHTTP에서 Post 사용할 때 data encoding 문제
김대영 [] 1738 읽음    2001-07-18 10:50
고맙습니다.
아직 적용은 못 해 봤는데..
제가 원하는 방향이군요.

즐거운 하루 되세요.


방태윤 님이 쓰신 글 :
: encoding(인가 용어가?)은 NMURL 를 사용하사면 됩니다.
: 그리고 모두 encoding 이 되야하는것은 아닙니다.
: 데이터부분만 encoding이 되야 할겁니다.
: http:www.aaa.co.kr?name=홍삼원&juso=경기도김포
: 라면 홍삼원,경기도김포 만 encoding 되어야 할것입니다.
:
: 참고로 저는 NMHTTP 로 post하는데 실패했습니다.get은 되는거 같것데..
: 결국 api로 했습니다...
:
: 해보시고 안되면 아래와 같이 해보십시요....
:
: AnsiString __fastcall TForm1::conv(AnsiString s)
: {
:   NMURL1->InputString = s;
:   return NMURL1->Encode;
: }
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:     HINTERNET   hOpen, hConnect, hReq;
:     DWORD       dwSize, dwCode;
:     int         i;
:     AnsiString     post_str,szReturned;
:
:     static  char    szData[10240];
:
:     hOpen = InternetOpen("WebMessage", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
:     if (!hOpen)
:     {   ShowMessage("InternetOpen");
:         return;
:     }
:     hConnect = InternetConnect(hOpen, "상대방주소(www.yahoo.com)", INTERNET_DEFAULT_HTTP_PORT, "",  "", INTERNET_SERVICE_HTTP, 0  , 0);
:     if (!hConnect)
:     {   ShowMessage("InternetConnect");
:         InternetCloseHandle (hOpen);
:        
:         return;
:     }
:     hReq = HttpOpenRequest(hConnect, "POST","받아올페이지(/servlet/xxx.xxx)", HTTP_VERSION, "", NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, 0);
:     if(!hReq)
:     {   ShowMessage("HttpOpenRequest");
:         InternetCloseHandle (hConnect);
:         InternetCloseHandle (hOpen);
:         return;
:     }
:     AnsiString sHeader = "Content-Type: application/x-www-form-urlencoded\nAccept-Language: ko\n";
:     bool su=HttpAddRequestHeaders(hReq,sHeader.c_str(),sHeader.Length(),HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD);
:     if(!su)
:     {   ShowMessage("HttpAddRequestHeaders");
:         InternetCloseHandle (hConnect);
:         InternetCloseHandle (hOpen);
:         return;
:     }
:
:     post_str="";
:     post_str += "kind="+conv(Edit8->Text.Trim())+"&";
: .
: .
: .

:    post_str += "name="+conv(Edit7->Text.Trim())+"&";
:     post_str += "id="+conv(Edit38->Text.Trim());
:     post_str +="\n";
:
:
:     if (!HttpSendRequest (hReq, NULL, 0, (LPVOID) (LPCSTR) post_str.c_str(), post_str.Length()))
:     {   ShowMessage("HttpSendRequest");
:         InternetCloseHandle (hReq);
:         InternetCloseHandle (hConnect);
:         InternetCloseHandle (hOpen);
:         return;
:     }
:
:     dwSize = sizeof (DWORD);
:     if ( !HttpQueryInfo (hReq, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &dwCode, &dwSize, NULL))
:     {   ShowMessage("HttpQueryInfo");
:         InternetCloseHandle (hReq);
:         InternetCloseHandle (hConnect);
:         InternetCloseHandle (hOpen);
:         return;
:     }
:
:     do
:     {
:         if (!InternetReadFile (hReq, (LPVOID)szData, sizeof(szData) - 1, &dwSize) )
:         {   ShowMessage("InternetReadFile");
:             InternetCloseHandle (hReq);
:             InternetCloseHandle (hConnect);
:             InternetCloseHandle (hOpen);
:             return;
:         }
:
:         if (dwSize > 0)
:         {
:             szData [dwSize] = '\0';
:             szReturned += szData;
:         }
:     }
:     while (dwSize > 0);
:
:     InternetCloseHandle (hReq);
:     InternetCloseHandle (hConnect);
:     InternetCloseHandle (hOpen);
:
:     if (szReturned.AnsiPos("not a valid destination number"))
:     {   ShowMessage("not a valid destination number");
:         return;
:     }
:     else if (szReturned.AnsiPos("has been sent successfully"))
:     {   ShowMessage("has been sent successfully");
:         return;
:     }
:     Memo1->Lines->Add(szReturned);
:
: }
: wininet.lib 을 포함시켜야 될겁니다.
: 그거에 대한 내용은 여기서 찾아보시구요..
: 인터넷 여기저기를 뒤져서
: 몇개의 소스를 조합했더니만 겨우 해결했던걸로 기억됩니다.
: 도움이 되서 시간을 절약하셨으면 좋겠습니다.끝. 
:
: 김대영 님이 쓰신 글 :
: : 제목대로 NMHTTP를 가지고 Post로 data를 보내려고 합니다.
: : 자꾸 오류가 나서 실제 packet을 따서 봤더니
: : data들이 전부 encoding되어 있더군요.
: :
: : encoding 된것 자체는 문제가 없는데,
: : 그 encoding 방식이 서버측에서 decoding하는 방식과 차이가 있더군요.
: : ('='나 '.' 등은 encoding 하지 않고 싶은데 자동으로 하고 있습니다)
: :
: : 이 자동 encoding이 NMHTTP 콤포넌트 레벨에서 하는 것인가요?
: : 아니라면 어떻게 하는 것이 좋을까요?
: :
: : 아시는 분들의 도움을 기다리겠습니다.
: :

+ -

관련 글 리스트
9049 [질문] TNMHTTP에서 Post 사용할 때 data encoding 문제 김대영 1072 2001/07/16
9062     Re:[질문] TNMHTTP에서 Post 사용할 때 data encoding 문제 방태윤 1230 2001/07/16
9061     Re:[질문] TNMHTTP에서 Post 사용할 때 data encoding 문제 방태윤 7688 2001/07/16
9085         Re:Re:[질문] TNMHTTP에서 Post 사용할 때 data encoding 문제 김대영 1738 2001/07/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.