模拟POST动作

muyang008 2007-06-21 11:17:24
代码如下:
模拟POST动作
CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");
CString strFormData = _T("name=userid&password=password&action=submit");
CInternetSession session;
CHttpConnection* pConnection = session.GetHttpConnection(_T("ServerNameHere")); CHttpFile* pFile =pConnection->
OpenRequest(CHttpConnection::HTTP_VERB_POST, _T("FormActionHere"));
BOOL result = pFile->
SendRequest(strHeaders,(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
///一个输入用户名和密码,怎么样才能知道,输入的密码正确与否呢,想得到服务器的返回,该怎么做,能写出原码来吗??
...全文
269 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pku2009 2009-01-06
  • 打赏
  • 举报
回复
本人也准备做类似的东西,是要自动登录网站,就是可以自动输入用户名和密码。
验证码可以先不做,不知楼主实现了吗?
qq525931 2008-12-05
  • 打赏
  • 举报
回复
参见本页:
http://www.wantsoft.com/article/45.htm
jourbin 2008-11-30
  • 打赏
  • 举报
回复
没办法知道
只能从服务器返回的数据里来查找成功与否的标志字段
有时候从状态码就可以判断(大部分的网站,登陆成功后都会跳转页面(也就是状态码为302),而登陆失败,返回的是200)
muyang008 2008-11-29
  • 打赏
  • 举报
回复
#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://topic.csdn.net/u/20070621/23/81f7c118-9e0b-44ba-bbb1-52dab3a3adca.html");
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;
}
「已注销」 2007-06-28
  • 打赏
  • 举报
回复
你把数据包发给服务器是有返回信息的,你分析返回信息看是否正确登录
karlzheng 2007-06-28
  • 打赏
  • 举报
回复
帮顶!!
muyang008 2007-06-22
  • 打赏
  • 举报
回复
顶起来。顶起来。顶起来。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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