POST方式发送数据


上一页:GET方式发送数据

POST方式和GET的区别就是把发送的数据和网页地址分离开来。把数据放在HTTP协议的head部分,因此程序中多了一个 strHeaders = _T("Content-Type: application/x-www-form-urlencoded") 这个内容你还可以根据你的需要来改变,例如改为图像,或者二进制文件等。
下面源程序中与上一页“GET方式发送数据”不同的地方我都用蓝色标出;其中strFormData就是要发送的格式,内容是“curl=中国人&http=http://www.chinaren.comc&url=松鼠之家&http=http://www.fadshop.net/squirrel/&curl=新语丝&http=http://www.xys.org” 当然你需要根据你的需要来组织这里的内容。
#ifndef _DEBUG
    strHttpName="http://www.fadshop.net/curl/progsave.asp";
#else
    strHttpName = "http://Mycomputer/fadshop/curl/progsave.asp";
#endif
//    strHttpName = strHttpName + "?" + strFormData;
用GET方式发送数据就采用这句话

    CInternetSession sess;//建立会话
    CHttpFile* fileGet;
    CString strHeaders =
          _T("Content-Type: application/x-www-form-urlencoded");
    CException* e;
    TRY
    {
        fileGet=(CHttpFile*)sess.OpenURL(strHttpName);//打开文件
    }
    CATCH_ALL(e)
    {
        TRACE("Err:%d\n", GetLastError());
        fileGet = 0;
    }
    END_CATCH_ALL
    if(fileGet)
    {
        DWORD dwStatus;
        DWORD dwBuffLen = sizeof(dwStatus);
        BOOL bSuccess = fileGet->QueryInfo(
            HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,
            &dwStatus, &dwBuffLen);
        strGetSentence = "";
        if( bSuccess && dwStatus>= 200 &&dwStatus<300 ) { 
            BOOL result = fileGet->SendRequest(strHeaders,
               (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
            while(fileGet->ReadString(strSentence)){
                strGetSentence =  strGetSentence + strSentence + char(13) +
            char(10);
            }//取得返回的字节并显示 SetDlgItemText(IDC_COMMENT,
            strGetSentence); SetDlgItemText(IDC_UPLOADMSG,
        "上传完毕,松鼠谢谢您的合作。"); }// if
        bSuccess.
            else SetDlgItemText(IDC_UPLOADMSG,
        "上传出错\n请下次再执行,或者到松鼠之家查看最新信息。");fileGet->Close();
        delete fileGet;
    }
    else
        SetDlgItemText(IDC_UPLOADMSG, "网络不通,请检查你的网络连接情况。");
    sess.Close();

Copyright 1998-2002 Fadshop.net, Inc. All rights reserved. jhj123@163.net