c语言接收网页文件,怎么获取网页文件的大小

C/C++ codeBOOL DownloadFile(LPCSTR pstrURL, LPCSTR pstrSaveFileName, BOOL bBinary = TRUE)

{

CInternetSession sess;

CStdioFile *pHttpFile = NULL;

DWORD dwHttpFlag = INTERNET_OPEN_TYPE_PRECONFIG

| INTERNET_FLAG_EXISTING_CONNECT

| INTERNET_FLAG_NO_AUTO_REDIRECT

// | INTERNET_FLAG_RELOAD

| INTERNET_FLAG_NO_COOKIES

// | INTERNET_FLAG_DONT_CACHE

// | INTERNET_FLAG_PRAGMA_NOCACHE

| INTERNET_FLAG_MAKE_PERSISTENT

;

UINT nSaveFlag = CFile::modeCreate | CFile::modeWrite;

if(bBinary)

{

dwHttpFlag |= INTERNET_FLAG_TRANSFER_BINARY;

nSaveFlag |= CFile::typeBinary;

}

else

{

dwHttpFlag |= INTERNET_FLAG_TRANSFER_ASCII;

nSaveFlag |= CFile::typeText;

}

try

{

sess.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,32000);

sess.SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000);

sess.SetOption(INTERNET_OPTION_CONNECT_RETRIES,5);

pHttpFile = sess.OpenURL(pstrURL, 1, dwHttpFlag);

}

catch(CInternetException *e)

{

TCHAR tszErr[1024];

if(e-> GetErrorMessage(tszErr, sizeof(tszErr)))

{

AfxMessageBox(tszErr);

}

e-> Delete();

return FALSE;

}

if(NULL == pHttpFile)

{

return FALSE;

}

CStdioFile fout;

if( !fout.Open(pstrSaveFileName, nSaveFlag) )

{

delete pHttpFile;

sess.Close();

return FALSE;

}

if(bBinary)

{

#define BUF_LEN 1024 * 8

BYTE tszBuff[BUF_LEN] = {0};

UINT nRead = 0;

while( (nRead = pHttpFile-> Read(tszBuff, BUF_LEN)) > 0)

{

fout.Write(tszBuff, nRead);

}

#undef BUF_LEN

}

else

{

CString str = _T( " ");

while(pHttpFile-> ReadString(str))

{

str += _T( "\n ");

fout.WriteString(str);

}

}

fout.Close();

delete pHttpFile;

sess.Close();

return TRUE;

}

------解决方案--------------------

随手写了个,没加错误处理。

代码:C/C++ code#include

#include

#pragma comment(lib,"Ws2_32.lib")

int main()

{

WSADATA wsa;

WSAStartup(MAKEWORD(2,2),&wsa);

SOCKET serverSocket;

serverSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

struct sockaddr_in serverAddress;

memset(&serverAddress,0,sizeof(sockaddr_in));

serverAddress.sin_family=AF_INET;

serverAddress.sin_addr.S_un.S_addr = inet_addr("211.100.26.77");

serverAddress.sin_port = htons(80);

connect(serverSocket,(struct sockaddr*)&serverAddress,sizeof(serverAddress));

char * msgHttpRequest = "GET /index.html HTTP/1.1\r\n"

"Host:csdn.net\r\n\r\n";

send(serverSocket,msgHttpRequest,strlen(msgHttpRequest),0);

char recvBuff[1024] = { 0 };

recv(serverSocket,recvBuff,1024,0);

printf("%s\n",recvBuff);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值