mobile实现HTTP下载文件

#ifndef _HTTPINET_H_
#endif _HTTPINET_H_
#pragma once
#include <afxinet.h>
class CHttpInet
{
public:
CHttpInet(void);
~CHttpInet(void);

public:
BOOL GetHttp();
BOOL GetHttpData(char *Pcbuff);
public:
HINTERNET m_hRequest;
HINTERNET m_hNet;
HINTERNET m_inteconnect;
HINTERNET m_OpenRequest;
char buffer[1024];
//char buf[30000];
HBITMAP m_Hbitmag;
};




#include "stdafx.h"
#include "CHttpInet.h"
#include <WinInet.h>
#include <afxinet.h>
#include <UrlMon.h>
#pragma comment(lib,"Urlmon.lib")
#pragma comment(lib,"wininet.lib")


CHttpInet::CHttpInet()
{
int i;
const DWORD c_dwSizeIn = MAX_PATH;
DWORD dwSizeOut = 0;
char *szAgent = new char[c_dwSizeIn];
ZeroMemory(szAgent,c_dwSizeIn*sizeof(char));
HRESULT hRes = ::UrlMkGetSessionOption(URLMON_OPTION_USERAGENT,szAgent,c_dwSizeIn,&dwSizeOut,0);
CString Age;
int len = strlen(szAgent);
for (i=0;i<len;i++)
{
Age = Age+szAgent[i];
}
wchar_t *Header = _T("z=1311899487.859&rt=0&s=10000000111&f=html_no_js&y=text&client_sdk=1&ex=1&v=20100528-ANDROID-3312276cc1406347\r\n\r\n");
CString addAgen = _T("Mozilla/4.0 (compatible; MSIE 4.01; Windows CE; PPC; 240x320)AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2 (AdMob-ANDROID-20091123)");
CString AgenHeader = addAgen+_T("\r\n\r\n");
CString szHeaders = _T("Content-Type:application/x-www-form-urlencoded")+AgenHeader;
DWORD dwError;
//utf-8
int u8Len = ::WideCharToMultiByte(CP_UTF8,NULL,Header,wcslen(Header),NULL,0,NULL,NULL);
char *utf8 = new char[u8Len+1];
::WideCharToMultiByte(CP_UTF8,NULL,Header,wcslen(Header),utf8,u8Len,NULL,NULL);
utf8[u8Len] = '\0';
int Ulen = wcslen(Header);
CStringW AddHeader;
for (i=0;i<Ulen;i++)
{
AddHeader+=utf8[i];
}
//初始化WinInet库,且返回一对话句柄
long nDownLoad = 0;
m_hNet = ::InternetOpen(_T("Internet Explorer"),INTERNET_OPEN_TYPE_PROXY,_T("10.130.43.99"),NULL,NULL);
if (m_hNet == NULL)
{
dwError = GetLastError();
::InternetCloseHandle(m_hNet);
//return FALSE;
}
//设置超时时间
DWORD dwTime = 10*1000;
::InternetSetOption(m_hNet,INTERNET_OPTION_CONNECT_TIMEOUT,(LPVOID)dwTime,sizeof(DWORD));
//创建一个特定的对话
::INTERNET_PORT potr = 8080;
m_inteconnect = ::InternetConnect(m_hNet,_T("10.130.43.99"),potr,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
if (m_inteconnect == NULL)
{
dwError = GetLastError();
::InternetCloseHandle(m_hNet);
::InternetCloseHandle(m_inteconnect);
//return FALSE;
}
//打开HTTP请求
TCHAR *Accept[] = {_T("*/*"),NULL};
m_OpenRequest = ::HttpOpenRequest(m_inteconnect,_T("POST"),_T("/AndroidServerTest/AdTestServlet"),_T("HTTP/1.1"),NULL,(LPCTSTR*)Accept,
INTERNET_FLAG_NO_CACHE_WRITE|INTERNET_FLAG_RELOAD||INTERNET_FLAG_KEEP_CONNECTION,0);
if (m_OpenRequest == NULL)
{
dwError = GetLastError();
::InternetCloseHandle(m_hNet);
::InternetCloseHandle(m_inteconnect);
::InternetCloseHandle(m_OpenRequest);
//return FALSE;
}
INTERNET_BUFFERS RequestInfo;
memset((void *)&RequestInfo,0,sizeof(INTERNET_BUFFERS));
RequestInfo.dwStructSize = sizeof(INTERNET_BUFFERS);
RequestInfo.lpvBuffer = NULL;
RequestInfo.dwBufferTotal = 0;
RequestInfo.lpcszHeader = szHeaders;
RequestInfo.dwHeadersTotal = sizeof(szHeaders);
byte *pszDate = new byte[AddHeader.GetLength()];
char *pconten = new char[AddHeader.GetLength()];
memset(pszDate,0,AddHeader.GetLength());
memset(pconten,0,AddHeader.GetLength());
WideCharToMultiByte(CP_ACP,0,AddHeader.GetBuffer(0),-1,pconten,AddHeader.GetLength(),NULL,NULL);
memcpy(pszDate,pconten,AddHeader.GetLength());
LPVOID pBuf = AddHeader.GetBuffer();
BOOL AddSendRequest = ::HttpSendRequest(m_OpenRequest,szHeaders,szHeaders.GetLength(),pszDate,AddHeader.GetLength());
if (AddSendRequest == NULL)
{
dwError = GetLastError();
::InternetCloseHandle(m_hNet);
::InternetCloseHandle(m_inteconnect);
::InternetCloseHandle(m_OpenRequest);
delete []pszDate;
delete []pconten;
//return FALSE;
}
//return FALSE;
}
CHttpInet::~CHttpInet()
{


}
BOOL CHttpInet::GetHttpData(char *Pcbuff)
{
//下载文件
DWORD dwByetToRead = 0;
DWORD dwSizeofRequest = 4;
DWORD dwReadByte = 0;
DWORD dwBytes = 0;
int nPercent = 0;
memset(buffer,0,1024);
int nReadCount = 0;
while ((nReadCount = InternetReadFile(m_OpenRequest,buffer,1024,&dwBytes)))
{
if (dwBytes)
{
break;
}
}
int BufferLen = MultiByteToWideChar(CP_ACP,0,buffer,-1,NULL,0);
wchar_t *pwBuffer;
pwBuffer = new wchar_t[BufferLen];
if (!pwBuffer)
{
delete []pwBuffer;
}
::MultiByteToWideChar(CP_UTF8,0,buffer,-1,pwBuffer,BufferLen);
wchar_t *m_imgurl=NULL;
wchar_t *m_address=NULL;
wchar_t *m_phoneNumber=NULL;
wchar_t *m_content=NULL;
m_imgurl = wcsstr(pwBuffer,_T("imgurl="));
m_address = wcsstr(pwBuffer,_T("address="));
m_phoneNumber = wcsstr(pwBuffer,_T("phoneNumber"));
DWORD error;
//下载数据测试
DWORD length=0;
char buffer[1024];
memset(buffer,0,1024);
memset(Pcbuff,0,300000);
HINTERNET hInternet;
hInternet=InternetOpen(_T("Testing"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
if (hInternet==NULL)
{
//cout<<_T("Internet open failed!")<<endl;
return FALSE;
}
HINTERNET hUrl;
hUrl=InternetOpenUrl(hInternet,_T("http://10.130.43.99:8080/AndroidServerTest/img/1860.jpg"),NULL,0,INTERNET_FLAG_RELOAD,0);
if (hUrl==NULL)
{
// cout<<_T("Internet open url failed!")<<endl;
error = GetLastError();
InternetCloseHandle(hInternet);
InternetCloseHandle(hUrl);
return FALSE;
}
BOOL hwrite;
DWORD written;
HANDLE hFile;
hFile=CreateFile(_T("\\My Documents\\sss.jpg"),GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if (hFile==INVALID_HANDLE_VALUE)
{
//cout<<_T("Create File failed!")<<endl;
InternetCloseHandle(hUrl);
InternetCloseHandle(hInternet);
error = GetLastError();
return FALSE;
}
BOOL read = FALSE;
while(1)
{
read=InternetReadFile(hUrl,buffer,sizeof(buffer),&length);
if(length==0)
break;
strcat(Pcbuff,buffer);
hwrite=WriteFile(hFile,buffer,sizeof(buffer),&written,NULL);
if (hwrite==0)
{
//cout<<_T("Write to file failed!")<<endl;
CloseHandle(hFile);
InternetCloseHandle(hUrl);
InternetCloseHandle(hInternet);
return FALSE;
}
}
CloseHandle(hFile);
InternetCloseHandle(hUrl);
InternetCloseHandle(hInternet);
delete []pwBuffer;
return TRUE;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值