COM:提交表单返回405错误

cj1205 2011-01-18 03:37:47

void CWebGameView::OnDocumentComplete(LPCTSTR lpszURL)
{
// TODO: 在此添加专用代码和/或调用基类

CHtmlView::OnDocumentComplete(lpszURL);

//获得源码
CString strSource;
GetSource(strSource);

BOOL bRetVal = FALSE;
CComPtr<IDispatch> spDisp = GetHtmlDocument();
//CComQIPtr<IHTMLDocument2> spPersistStream = spDisp;
m_hdtHtmlMonitor = spDisp;

if( _tcscmp(lpszURL, _T("http://xxx/xx/index/")) == 0)
{
LoginGame();
}
}

DWORD CWebGameView::LoginGame()
{
IHTMLInputTextElement *ppvhInputElemt = NULL;
IHTMLFormElement *ppvhFormElemt = NULL;
IDispatch *ppvdispOption = NULL;
IHTMLElementCollection *ppvhElemtCollection = NULL;
COleVariant vatIndexForm( (long)0);
HRESULT hResult;
CString strUserName;
CString strPassword;

//从对话框输入用户名密码
m_pdlLogin = new CDialogLogin();
if( m_pdlLogin->DoModal() == IDOK)
{
strUserName = m_pdlLogin->GetLoginUserName();
strPassword = m_pdlLogin->GetLoginPassword();
}

//用户名输入控件
hResult = m_hdtHtmlMonitor->get_all(&ppvhElemtCollection);
hResult = ppvhElemtCollection->item( COleVariant(_T("username")), vatIndexForm, &ppvdispOption);
hResult = ppvdispOption->QueryInterface(IID_IHTMLInputTextElement, (void**)&ppvhInputElemt);
hResult = ppvhInputElemt->put_value( strUserName.GetBuffer());
ppvhInputElemt->Release();
ppvdispOption->Release();

//密码输入控件
ppvhElemtCollection->item( COleVariant(_T("password")), vatIndexForm, &ppvdispOption);
hResult = ppvdispOption->QueryInterface(IID_IHTMLInputTextElement, (void**)&ppvhInputElemt);
ppvhInputElemt->put_value( strPassword.GetBuffer());
ppvhInputElemt->Release();
ppvdispOption->Release();

//提交表单
hResult = ppvhElemtCollection->item( COleVariant(_T("lgform")), vatIndexForm, &ppvdispOption);
hResult = ppvdispOption->QueryInterface(IID_IHTMLFormElement, (void**)&ppvhFormElemt);
hResult = ppvhFormElemt->submit();
ppvhFormElemt->Release();
ppvdispOption->Release();

ppvhElemtCollection->Release();
return 0;
}


                <form id="lgform" name="lgform" method="post" action="" onsubmit="FormSubmit();return false;">
<div class="loginInfo">
<p>
<label>用户名:</label>
<input type="text" name="username" id="username" class="text" />
</p>
<p>
<label>密  码:</label>

<input type="password" name="password" id='password' class="text" />
</p>
<p>
<label> </label>
<input type="checkbox" id="autoLogin" name="autoLogin" value="true" class="checkbox" />
记住我的登录状态</p>
<p>
<label> </label>

<input name="Submit" type="submit" class="button" value=""/>
<a id="fp" href="https://passport.baidu.com/?getpass" >忘记密码</a></p>
</div>

<input type='hidden' value='yx' name='tpl' />
<input type='hidden' name='u' id='ru' value='' />

</form>


当我在LoginGame()里面提交表单完成后,在OnDocumentComplete里面获得了与提交表单页同样的url,但GetSource()后发现内容如下:
<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx</center>
</body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->

请高手指点下,是啥问题,表单需要提交的数据也就是用户名和密码了,我都填写了;用户名和密码肯定是正确的
...全文
468 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
FoxBryant 2013-03-19
  • 打赏
  • 举报
回复
找到submit按钮,然后触发其click不行吗?
feile922 2011-01-24
  • 打赏
  • 举报
回复
通过xmlhttp组件提交
cj1205 2011-01-20
  • 打赏
  • 举报
回复
	hResult = m_hdtHtmlMonitor->get_parentWindow( &ppvhWindow2);
BSTR bs1= SysAllocString(_T("function confirm(str){FormSubmit();return true}"));
BSTR bs2(L"javascript");
hResult = ppvhWindow2->execScript(bs1, bs2, &pVariantTemp);

我这样子写就成功了 = =
cj1205 2011-01-20
  • 打赏
  • 举报
回复
	//模拟提交
hResult = m_hdtHtmlMonitor->get_parentWindow( &ppvhWindow2);
BSTR bs1= SysAllocString(_T("FormSubmit();return false;"));
BSTR bs2(L"javascript");
hResult = ppvhWindow2->execScript(bs1, bs2, &pVariantTemp);
::SysFreeString(bs2);
::SysFreeString(bs1);


这样子的话会提示return false在函数语句外,而且提交不成功。

to:hdt
除了xmlhttp,用IHTML接口不行么,要怎么实现
cj1205 2011-01-19
  • 打赏
  • 举报
回复
直接在网页登陆肯定是可以的,我现在想换下方式,在item中找到“登陆”(提交表单的按钮),然后模拟点击事件,看看能行不
真相重于对错 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cj1205 的回复:]
引用 6 楼 hdt 的回复:

它不是通过form 的submit 提交的而是通过ajax提交的


那要如何做才能模拟提交表单
[/Quote]
你可以通过xmlhttp组件提交
cj1205 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hdt 的回复:]

它不是通过form 的submit 提交的而是通过ajax提交的
[/Quote]

那要如何做才能模拟提交表单
真相重于对错 2011-01-19
  • 打赏
  • 举报
回复
它不是通过form 的submit 提交的而是通过ajax提交的
做鸡真好吃 2011-01-18
  • 打赏
  • 举报
回复
直接网页登陆可以么。
FormSubmit里面调试看看
cj1205 2011-01-18
  • 打赏
  • 举报
回复
function FormSubmit(){
var urls = "/login.xhtml";
if (G("autoLogin")) {
jQuery.ajax({
      type: "POST",
      url: urls,
data: {c:'login',loginName:jQuery("#username").val(),password:jQuery("#password").val(),autoLogin:G("autoLogin").value},
      success: function(result) {
jQuery("#loginstatus").html(result);
      }
    });
}
else{
jQuery.ajax({
      type: "POST",
      url: urls,
data: {c:'login',loginName:jQuery("#username").val(),password:jQuery("#password").val(),autoLogin:false},
      success: function(result) {
jQuery("#loginstatus").html(result);
      }
    });
}
}

原网页是包含在某个js文件下,我一顿好找,请兄弟们多多帮忙啊,先谢过
真相重于对错 2011-01-18
  • 打赏
  • 举报
回复
贴出 FormSubmit()这个js 函数的代码?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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