WinInet API

luckyboy101 2009-05-25 03:48:59
学习一下WinInet API来实现表单提交,以开心网为测试,代码如下
UpdateData(true);
CString strHeaders =_T("Content-Type: application/x-www-form-urlencoded");
CString strFormData = _T("email=");
strFormData+=m_username;
strFormData+=_T("&password=");
strFormData+=m_password;
CInternetSession session;
CHttpConnection* pConnection =session.GetHttpConnection(_T("kaixin001.com"));
CHttpFile* pFile =pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,_T("home"));

BOOL result = pFile->SendRequest(strHeaders,(LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
为何登陆不了,请高手指点
...全文
207 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenshouzhuifeng 2011-11-17
  • 打赏
  • 举报
回复
呵呵,一般的在浏览器上登录后跳转到其它的页面是因为其实是跳转到了另外一个url,,你不用管它返回的是否是登录页面,请求一个本来需要登录的才可以浏览的页面,看下结果就知道有没有成功了
luckyboy101 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 biweilun 的回复:]
C/C++ code
CInternetSession* m_pSession;
CHttpConnection* m_pCon;
m_pCon = m_pSession->GetHttpConnection(HTTP_SERVER, 0, HTTP_SERVER_PORT);
if (m_pCon != NULL)
{
CHttpFile* pFile = NULL;
try
{
pFile = m_pCon->OpenRequest(CHttpConnection::HTTP_VERB_GET,
lpszCommand, lpszRefer);
if (pFile != NULL)
{
pFile->AddRe…
[/Quote]
用了你的代码也没解决
luckyboy101 2009-05-25
  • 打赏
  • 举报
回复
email siheng303@163.com
password 110110110
url /home/
这个是抓包出来的post data
luckyboy101 2009-05-25
  • 打赏
  • 举报
回复
能不能具体点,或者给个参考资料
金金2019 2009-05-25
  • 打赏
  • 举报
回复
winnet API 超时设置有问题
^_^

所有设置一个等待线程
luckyboy101 2009-05-25
  • 打赏
  • 举报
回复
就是这些不太懂,刚开始学,请指教
greatws 2009-05-25
  • 打赏
  • 举报
回复
这种问题的解决方法最好是抓包,从浏览器上登录一次,看下数据包,和你程序发出和接收的数据包或者HTTP Request做对比,看看少了什么或者多了什么。
luckyboy101 2009-05-25
  • 打赏
  • 举报
回复
代码是没啥问题的,就是访问的地址不是太确定,,_T("home")不知道对不对
biweilun 2009-05-25
  • 打赏
  • 举报
回复

CInternetSession* m_pSession;
CHttpConnection* m_pCon;
m_pCon = m_pSession->GetHttpConnection(HTTP_SERVER, 0, HTTP_SERVER_PORT);
if (m_pCon != NULL)
{
CHttpFile* pFile = NULL;
try
{
pFile = m_pCon->OpenRequest(CHttpConnection::HTTP_VERB_GET,
lpszCommand, lpszRefer);
if (pFile != NULL)
{
pFile->AddRequestHeaders(ACCEPT_TYPE);
pFile->AddRequestHeaders(ACCEPT_LANGUAGE);
pFile->AddRequestHeaders(ACCEPT_ENCODING);
pFile->AddRequestHeaders(CONNECTION_TYPE);
pFile->SendRequest();
DWORD dwStatusCode = 0;
pFile->QueryInfoStatusCode(dwStatusCode);
if (dwStatusCode != 200)
{
pFile->Close();
delete pFile;
}
}
}
catch (CInternetException *pEx)
{
CString szError;
pEx->GetErrorMessage(szError.GetBuffer(MAX_PATH), MAX_PATH);
szError.ReleaseBuffer();
TRACE("SendRequest exception. Error message : %s\n", szError);
pEx->Delete();
}
}


参考这个
luckyboy101 2009-05-25
  • 打赏
  • 举报
回复
没提示错误,我用下面的代码写入文件
HANDLE hFile;
hFile = CreateFile("a.html", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{

return ;
}
DWORD dwWrited;


const int size = 23000;
byte pByte[size]={0};
int count = 0;
while( ( count = pFile->Read(pByte,size) ) > 0 )
{
WriteFile(hFile, pByte,count, &dwWrited, NULL);
m_tmp+=pByte;
}
CloseHandle(hFile);
写入的文件一直是登陆页面,没有登陆进去
alibabademama 2009-05-25
  • 打赏
  • 举报
回复
有什么错误提示啊












--------------完美的签名线-----------------
游戏开发第一站 http://dev.web863.com
把.h文件里面的代码放出来一下,CPP就不放了,自己下载哦。 #ifndef Download_h__ #define Download_h__ #include <wininet.h> #pragma comment(lib,"wininet.lib") class CHttpGet { public: //测试网络是否连接成功。 BOOL TestNetworkIsConnected(); //动态获取URL的文件名。 //LPCTSTR szURL URL地址 //LPSTR pFileName 文件名缓冲区,获取到文件名后,会文件名放入到该buffer //DWORD dwBufferOfLenght pFileName缓冲区大小。 //pResult 是否成功。 BOOL HttpGetFileName(LPCTSTR szURL,LPSTR pFileName,DWORD dwBufferOfLenght,BOOL * pResult); //将文件下载到缓冲区,而不是保存到文件 //szURL URL地址 //szBuffer 缓冲区。 //dwSize 缓冲区大小 //lpdwSizeOfRet实际下载到的数据大小。 DWORD URLDownloadToBuffer(LPCTSTR szURL,LPBYTE szBuffer,DWORD dwSize,DWORD *lpdwSizeOfRet); //下载文件 //szURL URL地址 //szFileSavePath 文件完整保存路径 // CheckFileTypeIsPe 是否需要检测文件是不是PE文件。 DWORD URLDownloadToFile(LPCTSTR szURL,LPCTSTR szFileSavePath,BOOL CheckFileTypeIsPe); }; #endif // Download_h__ CPP部分代码,详细自己下载。 完全原创。代码注释详细。 使用及其方便... DWORD CHttpGet::URLDownloadToFile(LPCTSTR szURL,LPCTSTR szFileSavePath,BOOL CheckFileTypeIsPe) { if(!CheckUrl(szURL)) return FALSE; HINTERNET hInternetOpen = InternetOpen( "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)", INTERNET_OPEN_TYPE_PRECONFIG,/*返回注册表中代理或直接的配置*/ NULL,//不使用代理 所以不要设置用户名 NULL,//不使用代理 所以不用设置密码 NULL ); if(hInternetOpen == NULL) return FALSE; HINTERNET hInternetUrl = InternetOpenUrl( hInternetOpen, szURL, "Accept: */*",//支持左所有文件 -1, INTERNET_FLAG_RELOAD|INTERNET_FLAG_PRAGMA_NOCACHE,/*不要从缓冲里面获取数据 */ NULL); if(hInternetUrl == NULL) return FALSE; CHAR szStatus[1024]={NULL}; DWORD dwBufferLen = sizeof(szStatus); //查询状态 HttpQueryInfo(hInternetUrl,HTTP_QUERY_STATUS_CODE,szStatus,&dwBufferLen;,NULL); //4xx(请求错误) DWORD dwCode = atoi(szStatus); if( dwCode > 400 && dwCode < 500) return FALSE; //5xx(服务器错误) if( dwCode >500 && dwCode < 600) return FALSE; //开始下载文件 HANDLE hFile = CreateFile(szFileSavePath,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile == INVALID_HANDLE_VALUE) { InternetCloseHandle(hInternetUrl); InternetCloseHandle(hInternetOpen); return FALSE; } CHAR szReadBuffer[4096]={NULL}; DWORD dwInternetReadOfByte = 0; DWORD dwWriteByte = 0; BOOL bFirst = FALSE; BOOL bResult = TRUE; do { BOOL bRet = InternetReadFile(hInternetUrl,szReadBuffer,sizeof(szReadBuffer),&dwInternetReadOfByte;); //说明文件传送完了。 if(bRet == TRUE && dwInternetReadOfByte == 0) break; if(bFirst == FALSE && CheckFileTypeIsPe==TRUE) { bFirst = TRUE; if(((PIMAGE_DOS_HEADER)szReadBuffer)->e_magic!= IMAGE_DOS_SIGNATURE) { bResult = FALSE; break; } } WriteFile(hFile,szReadBuffer,dwInternetReadOfByte,&dwWriteByte;,NULL); } while (TRUE); CloseHandle(hFile); InternetCloseHandle(hInternetUrl); InternetCloseHandle(hInternetOpen); return bResult; }

18,363

社区成员

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

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