一个困扰我很多天的问题IWebBrowser2的Navigate2方法的post参数(第四个参数)

jackion31 2006-11-22 01:00:11
我想调用此方法Navigate2到一个url,并post的一些数据给这个url,就像类似执行下这样的网页一样http:\\127.0.0.1\user_login.asp?user_name='123'不过这种是get的方式传送数据

下面是我参考网上和网友提供的示例写的,不知道哪儿还有问题,始终无法接收到post参数中的数据,好心人帮我看一下究竟是哪儿的问题,感激啊
CComVariant sURL="127.0.0.1/user_login.php";
CString sPostData="user_name=1234";
BSTR bstrHeaders = NULL;
CComVariant vFlags = "", vTargetFrameName="", vPostData="", vHeaders="";
LPSAFEARRAY psa;
UINT cElems = sPostData.GetLength();
LPSTR pPostData;
LPVARIANT pvPostData;
HRESULT hr;
CComPtr<IWebBrowser2> pWebBrowser2;
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_InternetExplorer,
NULL,CLSCTX_LOCAL_SERVER,
IID_IWebBrowser2,(void **)&pWebBrowser2);
bstrHeaders = SysAllocString(L"Content-Type: application/x-www-form-urlencodedrn");
if (!bstrHeaders)
{
MessageBox("Could not allocate bstrHeaders", "Warning", MB_OK | MB_ICONWARNING);
return;
}

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

pvPostData = &vPostData;
if(pvPostData)
{
VariantInit(pvPostData);
psa = SafeArrayCreateVector(VT_UI1, 0, cElems);
if(!psa)
{
return;
}
SafeArrayAccessData(psa, (LPVOID*)&pPostData);
memcpy(pPostData, sPostData, cElems);
SafeArrayUnaccessData(psa);
V_VT(pvPostData) = VT_ARRAY | VT_UI1;
V_ARRAY(pvPostData) = psa;
}
pWebBrowser2->Navigate2(&sURL, &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
...全文
669 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ponder781017 2007-01-27
  • 打赏
  • 举报
回复
不过呀
leniao 2007-01-05
  • 打赏
  • 举报
回复
借过看了!
尘雨 2006-11-22
  • 打赏
  • 举报
回复
如果只是基本的字符串POST那么,编码仅仅需要urlencode,他会把字符串的空格和非字母字符,汉字转换为%20,%DE,这样的形式

asp里,想知道请求是否post,request.servervariables("REQUEST_METHOD")
得到基本的表单值,比如用户名request.form("user_name")

你可以测试一下

你的代码中要改一下
CString sPostData="user_name=1234\r\n";

bstrHeaders = SysAllocString(L"Content-Type: application/x-www-form-urlencoded\r\n");


如果是上传文件,就需要更复杂一些的编码。具体的你可以搜索一下
jackion31 2006-11-22
  • 打赏
  • 举报
回复
vieri_ch(尘雨-自在飞花轻似梦,无边丝雨细如愁)
asp 中
response.write request("user_name")就可以进行相应的输出

你说的那个post data需要编码怎么弄啊,我现在应该是没有编码的吧
jackion31 2006-11-22
  • 打赏
  • 举报
回复
非常感谢vieri_ch(尘雨-自在飞花轻似梦,无边丝雨细如愁)
你说的完全正确,帮我解决了这个问题,头的\r\n很重要,如果不加的话,apache+php就不行
正如你所说,不同的webserver要求的严格性有差异
尘雨 2006-11-22
  • 打赏
  • 举报
回复
作了一个测试,抓包看了一下,测试用的是一个asp,response输出请求的方法是什么,提交的参数是什么?
POST
ausername
结果应该是没错的

不过你的程序有个问题
bstrHeaders = SysAllocString(L"Content-Type: application/x-www-form-urlencodedrn");
urlencodedrn 好像应该是urlencoded

可能不同的Webserver对这个参数可能要求更严格一些,你可以尝试抓包试一下,另外post数据通常需要编码,比如utf-8或者base64编码,当然urlencode肯定少不了


///post request
POST /testpost.asp HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: 127.0.0.1
Content-Length: 20
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDASBCQBSS=MGPFEGNBBFALDNDOMCNFLLIC

user_name=a username

//post response
HTTP/1.1 100 Continue
Server: Microsoft-IIS/5.1
Date: Wed, 22 Nov 2006 02:10:22 GMT
X-Powered-By: ASP.NET

HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Wed, 22 Nov 2006 02:10:22 GMT
X-Powered-By: ASP.NET
Content-Length: 17
Content-Type: text/html
Expires: Wed, 22 Nov 2006 02:10:22 GMT
Cache-control: private

POST
ausername
myy 2006-11-22
  • 打赏
  • 举报
回复
顶,我也曾经被同样的问题郁闷过,一直搞不定...
jackion31 2006-11-22
  • 打赏
  • 举报
回复
谢谢vieri_ch(尘雨-自在飞花轻似梦,无边丝雨细如愁)

我用ASP+IIS测试了一下,我的那段代码是可以的,user_login.asp可以正确接收到post参数中的数据,那个头中的urlencoded似乎没有影响,改成我写的那个也可以正常接收到,可能IIS要求不是很严格

我在家里用的是apache+php的方式,顶楼的代码是不能正常接收到post中的数据的,或许跟你说的那样,webserver要求比较严格,晚上再按照你的建议修改下代码测试下来汇报结果

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧