读书人

怎么获取网页文件的大小

发布时间: 2012-02-16 21:30:36 作者: rapoo

如何获取网页文件的大小
如题 如何编写c程序获取某个网页的大小啊,不是指尺寸大小,是那个网页的大小。

比如让我输入 www.sina.com.cn 得到结果218KB 这样子

谢谢大家了 希望可以详细些 有实例最好了 谢谢

[解决办法]
参考

C/C++ code
BOOL   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 <stdio.h>#include <winsock2.h>#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;} 

读书人网 >C语言

热点推荐