2012年12月26日星期三
IWebBrowserApp.Cpp
/*
本文取名为:IWebBrowserApp.Cpp
下载数据有很多种办法,如:
1.URLDownloadToFile或者URLDownloadToCacheFile
2.HttpOpenRequest
3.WinHttpReadData
4.IWinHttpRequest
5.脚本的"WinHttp.WinHttpRequest.5.1"
6.SOCKET,自己写http头。
7.其他接口,如本文的,就有可能。
8.驱动
9.其他。
类似的上传数据也和上面的大同小异
首先搭建服务器,并且成功。
其次,建立一个asp文件,用于处理接收到的数据,命名为data.asp,内容如下:
<%
Dim vntPostedData, lngCount
Response.AddHeader "Request-Method", Request.ServerVariables("REQUEST_METHOD")
lngCount = Request.TotalBytes
if (lngCount <> 0) then
vntPostedData = Request.BinaryRead(lngCount)
Response.BinaryWrite vntPostedData
end if
%>
以上代码摘自:Microsoft SDKs\Windows\v7.1\Samples\web\winhttp\winhttppostsample\data.asp。
并把此文件放到iis服务器中,例如:C:\inetpub\wwwroot\data.asp.
此文件不必放在浏览器中主动的打开,因为你主动的打开是看不到啥的。
运行下面的代码,既可以看到你发送的数据。
下面的代码修改自:
如何自动发送表单数据到 Internet Explorer
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://127.0.0.1/data.asp");//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 = "made by correy";//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;
}
订阅:
博文评论 (Atom)
没有评论:
发表评论