利用apph,
如果得到post中的数据啊?
利用IInternetBindInfo:GetBindString()
只能得到MIME类型和url。
怎么才能得到post中的数据啊?
谢谢

解决方案 »

  1.   

    IInternetProtocol::Read () 
    http://www.vckbase.com/english/code/atl/asyncpp.shtml.htm
      

  2.   

    HOWTO: Handle POST Requests in a Pluggable Protocol Handler Q280522
    SUMMARY
    It is sometimes desirable to have a pluggable protocol as the target of FORM POST requests. This article outlines how to handle POST requests in an asynchronous pluggable protocol handler (APPH). MORE INFORMATION
    The APPH receives the POST data (by way of URLMON) from the client as part of the BINDINFO structure, as described in the following article in the Microsoft Knowledge Base: Q165800 PostMon.exe Demonstrates How to Use URL Moniker to POST Data 
    In addition, the MIME type of the POST data can be retrieved by means of the IInternetBindInfo::GetBindString method with a first parameter of BINDSTRING_POST_DATA_MIME. With this background information, you can use the following code to obtain the POST data from within an APPH's IInternetProtocol::Start() method: STDMETHODIMP CMyPlugProt::Start(
            LPCWSTR szUrl,
            IInternetProtocolSink *pIProtSink,
            IInternetBindInfo *pIBindInfo,
            DWORD grfSTI,
            DWORD dwReserved)
    { // Retrieve POST data.
    // m_bindinfo and m_bindf are members of the CMyPlugProt class, declared as:
    //  BINDINFO m_bindinfo;
    //  DWORD m_bindf; m_bindinfo.cbSize = sizeof(BINDINFO);
    if (pIBindInfo)
    hr = pIBindInfo->GetBindInfo(&m_bindf, &m_bindinfo);

    switch (m_bindinfo.dwBindVerb)
    {
    case    BINDVERB_POST:
    void *pData;
    UINT cPostData; // Post data size.

    if (m_bindinfo.stgmedData.tymed != TYMED_HGLOBAL)
    break;

    cPostData = m_bindinfo.cbstgmedData;
    if (!cPostData)
    break;

    pData = GlobalLock(m_bindinfo.stgmedData.hGlobal);
    if (pData)
    {
    // Allocate space to store the POST data if required.
    // For instance, a member variable, m_postData, 
    // declared as "BYTE *m_postData;", could be used 
    // as below:
    //  m_postData = new BYTE[cPostData];
    //  memcpy(m_postData, pData, cPostData);

    // After checking the data, unlock buffer.
    GlobalUnlock(m_bindinfo.stgmedData.hGlobal);

    // Retrieve MIME type of the post data.
    LPOLESTR pszMIMEType;
    ULONG dwSize;
    hr = pIBindInfo->GetBindString(
    BINDSTRING_POST_DATA_MIME, &pszMIMEType, 1, &dwSize);

    if(hr == S_OK)
    {
    // pszMIMEType now contains the MIME type of the post data.
    // This would typically be "application/x-www-form-urlencoded" 
    // for a POST. In general, it could be any (standard or 
    // otherwise) MIME type. Many of the standard MIME type strings 
    // are #defined in <URLMon.h>. For instance, CFSTR_MIME_TEXT 
    // is L"text/plain".

    // Store the MIME type in a member variable here, if required. // Finally, free pszMIMEType via CoTaskMemFree.
    if (pszMIMEType)
    {
    CoTaskMemFree(pszMIMEType);
    pszMIMEType = NULL;
    }
    }
    else
    {
    // Assume "application/x-www-form-urlencoded".
    }

    }

    break;

    default:
    // It's a GET.
    break;
    }} // End of function STDMETHODIMP CMyPlugProt::Start() 
      

  3.   

    to  kingzai:
    谢谢,
    我看的就是这个例子。只能得到MIME类型和url等内容。
    用GetBindString
    无法得到post中数据的具体内容。
    555555555
      

  4.   

    http://cvs.sourceforge.net/viewcvs.py/shareaza/shareaza/IEProtocol.cpp?rev=1.3