如题 如何编写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; }