16,550
社区成员
发帖
与我相关
我的任务
分享
CHttpFile* m_pFile; //看m_pFile的Read
int CFarmHelperDAL::GetContent(CString& content )
{
UINT nReadSize = 0;
UINT nSize = 0;
PCHAR temp = m_buffer;
while( 0< (nReadSize = m_pFile->Read(temp,1024)))
{
*(temp+nReadSize) = '\0';
nSize+=nReadSize;
if( (BUFFER_SIZE -1024 )<= nSize)
break;
temp +=1024;
}
int len_wchart = MultiByteToWideChar(CP_UTF8, 0, m_buffer, -1, NULL, 0);
WCHAR* wlpbuf = new WCHAR[len_wchart];
MultiByteToWideChar(CP_UTF8, 0, m_buffer, -1, wlpbuf, len_wchart);
*m_buffer = '\0';
content = wlpbuf;
return nSize;
}
BOOL CDataUnPack::OpenFarm(CString& str,COpenFarm &TempOpenFarm)
{
//打开农场
//{"log":[],"user":{"headPicBig":null,"homePage":"http://user.qzone.qq.com/1111111111","money":522,"uExp":529,"uId":11111111,"uLevel":1,"uName":null}}
vector<CString> getall; //容器存储数量无上限
CString getItem; //存放每个逗号间的字符串
CString strtmp,Teststr;
int stat=1;
BOOL ret=FALSE;
while(!str.IsEmpty()) //遍历字符串,先按逗号分开,存放到容器中
{
int pos = str.Find(','); //从第一个逗号开始查找,并返回逗号的位置
if (pos!=-1)
{
getItem = str.Left(pos); //获得逗号左边的字符串
if(!getItem.IsEmpty()) //如果逗号间没有字符串,则不做任何处理
{
getall.push_back(getItem); //否则,将该字符串存放到容器中去
}
str = str.Right(str.GetLength()-pos-1);
}else if (!str.IsEmpty())
{
int postest=str.Find(L"}}");
getItem = str.Left(postest); //获得逗号左边的字符串
getall.push_back(getItem);
str="";
}else
{
break;
}
}
for(vector<int>::size_type iter=0;iter!=getall.size();++iter)
{
strtmp=getall[iter]; //获得第iter个字符串
if (stat==1)
{
int log = strtmp.Find(L"\"log\":"); //在该字符串中查找log字符
if(log != -1) //如果存在‘]’字符
{
TempOpenFarm.log = strtmp.Right(strtmp.GetLength()-strlen("\"log\":")-1); //获取右边的字符串(不包括'\"exp:\"')
}
stat++;
}
if (stat==2)
{
int headpic=strtmp.Find(L"\"user\":{\"headPicBig\":");
int homePage=strtmp.Find(L"\"homePage\":");
int money=strtmp.Find(L"\"money\":"); //金钱
int uExp=strtmp.Find(L"\"uExp\":");
int uid=strtmp.Find(L"\"uId\":");
int ulevel=strtmp.Find(L"\"uLevel\":");
int uName=strtmp.Find(L"\"uName\":");
if (headpic!=-1)
{
TempOpenFarm.userinfo.headPicBig = strtmp.Right(strtmp.GetLength()-strlen("\"user\":{\"headPicBig\":")); //获取右边的字符串
}
if (homePage!=-1)
{
TempOpenFarm.userinfo.homePage = strtmp.Right(strtmp.GetLength()-strlen("\"homePage\":")); //获取右边的字符串
}
if (money!=-1)
{
TempOpenFarm.userinfo.money=strtmp.Right(strtmp.GetLength()-strlen("\"money\":"));
}
if (uExp!=-1)
{
TempOpenFarm.userinfo.uExp=strtmp.Right(strtmp.GetLength()-strlen("\"uExp\":"));
}
if (uid!=-1)
{
TempOpenFarm.userinfo.uId=strtmp.Right(strtmp.GetLength()-strlen("\"uId\":"));
}
if (ulevel!=-1)
{
TempOpenFarm.userinfo.uLevel=strtmp.Right(strtmp.GetLength()-strlen("\"uLevel\":"));
}
if (uName!=-1)
{
TempOpenFarm.userinfo.uLevel=strtmp.Right(strtmp.GetLength()-strlen("\"uName\":"));
}
}
}
if (stat==2)
{
ret=TRUE;
}else
{
ret=FALSE;
}
return ret;
}
BOOL CQqFarmHelperLogin::GetVerifyImage()
{
CString strUrl = L"";
IStream *pIStream;//创建一个IStream接口指针,用来保存图片流
HRESULT hr;
CRect rcButton;
CButton* button = ((CButton*)GetDlgItem(IDC_BTN_NEXT));
CClientDC dc(this);
strUrl.Format(L"http://ptlogin2.qq.com/getimage?aid=15000102&%0.16f", CCommon::GetRandom16());
try{
CFile* pFile;
pFile = m_FarmHelperDAL.OpenURL(strUrl);
m_strVerifysession = m_FarmHelperDAL.GetCookie(L"verifysession");
DWORD dwSize = (DWORD)pFile->GetLength();
::CoInitialize(NULL); // 初始化COM
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
LPVOID lpBuf = ::GlobalLock( hMem );
pFile->Read(lpBuf,dwSize);
::GlobalUnlock( hMem );
// 由HGLOBAL得到IStream,参数TRUE 表示释放IStream的同时,释放内存
hr = ::CreateStreamOnHGlobal(hMem,TRUE,&pIStream );
ASSERT(SUCCEEDED(hr));
hr = ::OleLoadPicture(pIStream, dwSize, TRUE, IID_IPicture,(LPVOID *)&m_pIPicture);
if(!m_pIPicture){
throw 0;
}
// 宽高 MM_HIMETRIC模式,单位是0.01毫米
m_pIPicture->get_Width( &m_orgSize.cx ); // 宽
m_pIPicture->get_Height( &m_orgSize.cy ); // 高
CSize size(m_orgSize.cx,m_orgSize.cy);
dc.HIMETRICtoDP(&size); // 转换MM_HIMETRIC模式单位为MM_TEXT像素单位
button->SetWindowText(L"看不清,换一张");
button->GetWindowRect(rcButton);
CRect crLocation(rcButton);
button->GetParent()->ScreenToClient(crLocation);
m_realRect.left = crLocation.left;
m_realRect.top = crLocation.top - size.cy - 5;
m_realRect.right = size.cx + crLocation.left;
m_realRect.bottom = size.cy + m_realRect.top;
}catch(int)
{
button->SetWindowText(L"获取验证码失败");
}
if(pIStream) // 释放IStream指针,同时释放hMem
pIStream->Release();
::CoUninitialize();
return 0;
}
//由于其它情况,代码不能全部共享!!
int CFarmHelperDAL::Request(int nVerb, CHttpFile** pFile, CString& strURL, CStringArray& strHeaders)
{
CString strServer, strObject, strHeader;
unsigned short nPort;
DWORD dwServiceType;
if(!AfxParseURL(strURL, dwServiceType, strServer, strObject, nPort)){
return FALSE;
}
// 连接服务器
CHttpConnection *pServer = m_Session.GetHttpConnection(strServer, nPort);
if(pServer == NULL)
return FALSE;
// POST请求
*pFile = pServer->OpenRequest(nVerb, strObject, NULL, 1, NULL, NULL, INTERNET_FLAG_EXISTING_CONNECT);
if(*pFile == NULL)
return FALSE;
// 填HTTP写头
int count = strHeaders.GetCount();
for(int i =0 ;i<count;i++)
{
CString s = strHeaders.GetAt(i);
if( !s.IsEmpty() )
(*pFile) -> AddRequestHeaders(s);
}
m_strURL = strURL;
return TRUE;
}
// OpenRUL
CStdioFile* CFarmHelperDAL::OpenURL(CString& strURL)
{
m_strURL = strURL;
return m_Session.OpenURL(strURL);
}
// 发送GET
int CFarmHelperDAL::HttpGET(CHttpFile** pFile, CString& strURL, CStringArray& strHeaders)
{
if( !Request(CHttpConnection::HTTP_VERB_GET, pFile, strURL, strHeaders))
return FALSE;
// 提交请求
BOOL result = (*pFile)->SendRequest();
DWORD dwRet;
// 查询返回码,返回200表是成功
(*pFile)->QueryInfoStatusCode(dwRet);
if (dwRet != HTTP_STATUS_OK){
return FALSE;
}
return TRUE;
}