专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > C语言

怎么获取网页文件的大小

发布时间:2011-06-28 16:17:21 文章来源:www.iduyao.cn 采编人员:星星草
如何获取网页文件的大小
如题 如何编写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;
}
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: