如何自动 Internet Explorer POST 表单数据

14 篇文章 1 订阅

http://support.microsoft.com/kb/q167658/


   #include <windows.h>
      #define INITGUID
      #include <initguid.h>
      #include <exdisp.h>
      #include <memory.h>

      HRESULT GetPostData(LPVARIANT pvPostData);

      void main()
      {
         HRESULT hr;
         IWebBrowserApp* pWBApp = NULL; // Derived from IWebBrowser
         BSTR bstrURL = NULL, bstrHeaders = NULL;
         VARIANT vFlags = {0},
            vTargetFrameName = {0},
            vPostData = {0},
            vHeaders = {0};

         if (FAILED(hr = CoInitialize(NULL)))
         {
            return;
         }

         if (FAILED(hr = CoCreateInstance(CLSID_InternetExplorer,
            NULL,
            CLSCTX_SERVER,
            IID_IWebBrowserApp,
            (LPVOID*)&pWBApp)))
         {
            goto Error;
         }

         bstrURL = SysAllocString(L"http://<server>/scripts/navpost.asp");
         if (!bstrURL)
         {
            goto Error;
         }

         bstrHeaders = SysAllocString(
            L"Content-Type: application/x-www-form-urlencoded\r\n");
         if (!bstrHeaders)
         {
            goto Error;
         }

         V_VT(&vHeaders) = VT_BSTR;
         V_BSTR(&vHeaders) = bstrHeaders;

         hr = GetPostData(&vPostData);
         hr = pWBApp->Navigate(bstrURL, &vFlags,
                  &vTargetFrameName, &vPostData, &vHeaders);
         pWBApp->put_Visible(VARIANT_TRUE);

      Error:
         if (bstrURL) SysFreeString(bstrURL);
         if (bstrHeaders) SysFreeString(bstrHeaders);
         VariantClear(&vPostData);
         if (pWBApp) pWBApp->Release();
         CoUninitialize();
      }

      // Pack some data into a SAFEARRAY of BYTEs. Return in a VARIANT
      HRESULT GetPostData(LPVARIANT pvPostData)
      {
         HRESULT hr;
         LPSAFEARRAY psa;
         LPCTSTR cszPostData = "FName=Matt&Flavor=Mocha+Chip";
         UINT cElems = lstrlen(cszPostData);
         LPSTR pPostData;

         if (!pvPostData)
         {
            return E_POINTER;
         }

         VariantInit(pvPostData);

         psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
         if (!psa)
         {
            return E_OUTOFMEMORY;
         }

         hr = SafeArrayAccessData(psa, (LPVOID*)&pPostData);
         memcpy(pPostData, cszPostData, cElems);
         hr = SafeArrayUnaccessData(psa);

         V_VT(pvPostData) = VT_ARRAY | VT_UI1;
         V_ARRAY(pvPostData) = psa;
         return NOERROR;
      }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值