用VC 怎么实现网页登录

迷途的书童 2010-12-22 10:39:24
如果知道某个网页用户名和密码

想用VC来实现自动通过密码和用户名进行登录;

各位大大要是有相应的例子,给个看看,谢谢!

...全文
915 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
johnlove9527 2013-02-27
  • 打赏
  • 举报
回复
mark下,我也遇到了,学习下,现在貌似提交不了网站,正在查找原因
yiruirui0507 2010-12-23
  • 打赏
  • 举报
回复
HINTERNET hInternet,hConnect,hRequest;
BOOL bRet;
CString strResponse;
char* strPostData;

hInternet = InternetOpen(L"User-Agent",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
LPCWSTR lpHostName = L"www.kaixin001.com";
USHORT sPort = 80;
if(!hInternet)
goto Ret0;
hConnect = InternetConnect(hInternet, lpHostName, sPort, NULL, L"HTTP/1.1",INTERNET_SERVICE_HTTP,0,0);
if(!hConnect)
goto Ret0;

hRequest = HttpOpenRequest(hConnect, L"POST", L"login/login.php", L"HTTP/1.1", NULL,NULL,INTERNET_FLAG_RELOAD, 0);
if(!hRequest)
goto Ret0;

bRet = HttpAddRequestHeaders(hRequest, L"Content-Type: application/x-www-form-urlencoded", -1,HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD);
if(!bRet)
goto Ret0;

strPostData = "email=healer_kx@163.com&password=*********&url=/home/";
bRet = HttpSendRequest(hRequest, NULL, 0, (LPVOID)strPostData, strlen(strPostData));

qqq_008 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xiaoc1026 的回复:]
一段注册淘宝账号的代码:

C/C++ code

BOOL CDlgD4::RegTaobao(CString strEmail, CString strUserName, CString strPassword)
{
CString strInputName;
CString strInputPW;
{
strInputName = _……
[/Quote]

帮顶。。。
qqq_008 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 healer_kx 的回复:]
我这里有一段代码,你可以参考,登录开心网没有问题。

C/C++ code


HINTERNET hInternet,hConnect,hRequest;
BOOL bRet;
CString strResponse;
char* strPostData;

hInternet = InternetOpen(L"User-Agent",……
[/Quote]

友情帮顶。。。
hzy694358 2010-12-22
  • 打赏
  • 举报
回复
WinInet
healer_kx 2010-12-22
  • 打赏
  • 举报
回复
我这里有一段代码,你可以参考,登录开心网没有问题。


HINTERNET hInternet,hConnect,hRequest;
BOOL bRet;
CString strResponse;
char* strPostData;

hInternet = InternetOpen(L"User-Agent",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
LPCWSTR lpHostName = L"www.kaixin001.com";
USHORT sPort = 80;
if(!hInternet)
goto Ret0;
hConnect = InternetConnect(hInternet, lpHostName, sPort, NULL, L"HTTP/1.1",INTERNET_SERVICE_HTTP,0,0);
if(!hConnect)
goto Ret0;

hRequest = HttpOpenRequest(hConnect, L"POST", L"login/login.php", L"HTTP/1.1", NULL,NULL,INTERNET_FLAG_RELOAD, 0);
if(!hRequest)
goto Ret0;

bRet = HttpAddRequestHeaders(hRequest, L"Content-Type: application/x-www-form-urlencoded", -1,HTTP_ADDREQ_FLAG_REPLACE | HTTP_ADDREQ_FLAG_ADD);
if(!bRet)
goto Ret0;

strPostData = "email=healer_kx@163.com&password=*********&url=/home/";
bRet = HttpSendRequest(hRequest, NULL, 0, (LPVOID)strPostData, strlen(strPostData));

healer_kx 2010-12-22
  • 打赏
  • 举报
回复
WinInet API才行,它可以和内置的IE控件共享Cookie,WinHttp接口不行。。
大蓝头 2010-12-22
  • 打赏
  • 举报
回复
如果你通过CHtmlVIew来实现的话,那就是模拟网页点击,你所需要注意的就是加载页面,查找控制,填写值,点击提交。
如果你是想用CInternetSession来模拟实现,那你需要抓包分析他登录的传值方式,并且在提交登录后使用同一个SESSION来访问[或者记录下SESSIONID,每次访问在HTTP头中附加上这个SESSIONID],否则WEB服务器会认为是新的客户端,不认为你已经登录过。
这样你在登录后,就有了操作权限了,enjoy it!
Eleven 2010-12-22
  • 打赏
  • 举报
回复
Google之 VC 模拟网页登陆
迷途的书童 2010-12-22
  • 打赏
  • 举报
回复
偶也不想要通用的,只要有一个可以使用的例子就行啦, 谢谢啦!
见习学术士 2010-12-22
  • 打赏
  • 举报
回复
一段注册淘宝账号的代码:

BOOL CDlgD4::RegTaobao(CString strEmail, CString strUserName, CString strPassword)
{
CString strInputName;
CString strInputPW;
{
strInputName = _T("Email");
strInputPW = _T("Passwd");
}

BSTR bsPW = strPassword.AllocSysString();
BSTR bsUser = strUserName.AllocSysString();
BSTR bsEamil = strEmail.AllocSysString();

map<CString, BSTR> mapTaobaoInputInfo;
mapTaobaoInputInfo[TAOBAO_HTML_INPUT_EMAIL] = bsEamil;
mapTaobaoInputInfo[TAOBAO_HTML_INPUT_USERNAME] = bsUser;
mapTaobaoInputInfo[TAOBAO_HTML_INPUT_JPASSWORD] = bsPW;
mapTaobaoInputInfo[TAOBAO_HTML_INPUT_JREPASSWORD] = bsPW;



//m_regUrl.Navigate("http://member1.taobao.com/member/register.jhtml", NULL, NULL, NULL, NULL);

HRESULT hr;
COleVariant vaURL("http://member1.taobao.com/member/register.jhtml");
hr = CoCreateInstance (CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER,
IID_IWebBrowser2, (LPVOID *)&m_pBrowser);
VARIANT_BOOL pBool=TRUE;
m_pBrowser->put_Visible(pBool) ;

VARIANT vNull;
VariantInit(&vNull);
vNull.vt = VT_BSTR;
vNull.bstrVal = NULL;

m_pBrowser->Navigate2(vaURL,&vNull,&vNull,&vNull,&vNull) ;
READYSTATE emReadState;
m_pBrowser->get_ReadyState(&emReadState);
while (READYSTATE_COMPLETE != emReadState)
{
m_pBrowser->get_ReadyState(&emReadState);
}

IDispatch* pDispDocument;
hr = m_pBrowser->get_Document(&pDispDocument);
IHTMLDocument2* pHTMLDocument2;
hr = pDispDocument->QueryInterface( IID_IHTMLDocument2,(void**)&pHTMLDocument2 );
if (hr == S_OK)
{
IHTMLElementCollection* pColl = NULL;
hr = pHTMLDocument2->get_all(&pColl);
if (hr == S_OK && pColl != NULL)
{
LONG lNumElem;
hr = pColl->get_length( &lNumElem );
if ( hr == S_OK )
{
for (int i = 0 ; i < lNumElem ; ++i)
{
VARIANT varIndex;
varIndex.vt = VT_UINT;
varIndex.lVal = i;

VARIANT var2;
VariantInit( &var2 );
IDispatch* pDispItem;

hr = pColl->item( varIndex, var2, &pDispItem );
if ( hr == S_OK )
{
IHTMLElement* pElem;
hr = pDispItem->QueryInterface(IID_IHTMLElement,(void **)&pElem);
if ( hr == S_OK )
{
BSTR bstr;
hr = pElem->get_tagName(&bstr);
CString strTag;
strTag = bstr;
IHTMLInputTextElement* pUserInput;
hr = pDispItem->QueryInterface(IID_IHTMLInputTextElement, (void **)&pUserInput );
if ( hr == S_OK )
{
pUserInput->get_name(&bstr);
CString strName;
strName=bstr;
if( mapTaobaoInputInfo.end() != mapTaobaoInputInfo.find(strName) )
{
pUserInput->put_value(mapTaobaoInputInfo[strName]);
}
pUserInput->Release();
}
else
{
{
IHTMLInputButtonElement* pUserButton;
hr = pDispItem->QueryInterface(
IID_IHTMLInputButtonElement,
(void **)&pUserButton );
if (hr == S_OK)
{
BSTR bsBtName;
pUserButton->get_type(&bstr);
pUserButton->get_value(&bsBtName);
CString strTypeName, strBtName;
strTypeName = CString(bstr);
strBtName = CString(bsBtName);
if (hr == S_OK && strTypeName == _T("submit") && strBtName == TAOBAO_HTML_BTN_SUBMIT_NAME)
{
IHTMLFormElement* pForm;
hr=pUserButton->get_form(&pForm);
if ( hr == S_OK )
{
hr = pForm->submit();
pForm->Release();
break;
}
pUserButton->Release();
}
}
}
}
pElem->Release();
}
pDispItem->Release();
}
}
}
pColl->Release();
}
pHTMLDocument2->Release();
pDispDocument->Release();
}
m_pBrowser->Release();
return TRUE;
}

oyljerry 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 guanyijun123 的回复:]

网上的搜的例子不怎么好使,有没有全点的代码呢?
[/Quote]
各个网页实现方式不一样,代码并不一定都能通用..自己查看一下代码返回错误信息等
迷途的书童 2010-12-22
  • 打赏
  • 举报
回复
网上的搜的例子不怎么好使,有没有全点的代码呢?

16,472

社区成员

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

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

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