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
[9061] Re:[질문] TNMHTTP에서 Post 사용할 때 data encoding 문제
방태윤 [nabty] 7688 읽음    2001-07-16 21:40
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 문제 김대영 1739 2001/07/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.