您的位置:首页 > 理论基础 > 计算机网络

mobile实现HTTP下载文件

2011-10-29 08:15 801 查看
#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: