青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

[轉]利用Winsock模擬HTTP的GET請求

  網絡爬蟲需要從指定的URL通過HTTP協議來獲得HTML文件信息,以此從一個URL爬到另一個URL。在Windows平臺上,這往往通過WinINet接口實現。
  但是,如果對HTTP協議熟悉的話,也可以通過Winsock接口實現。代碼如下。

  1 #pragma warning (disable:4996)
  2 
  3 #define DEFAULT_URL "http://www.google.com"
  4 
  5 BOOL WinsockStartup(BYTE highVer, BYTE lowVer)
  6 {
  7     WSADATA wsaData;
  8     return WSAStartup(MAKEWORD(highVer, lowVer), &wsaData) == 0;
  9 }
 10 
 11 int SendData(SOCKET s, char * data)
 12 {
 13     return send(s, data, strlen(data), 0);
 14 }
 15 
 16 void ParseTheURL(char * pszURL, char * pszHostName)
 17 {
 18     char * p, * pHostStart;
 19 
 20     p = strstr(pszURL, "http://");
 21     if (p && p == pszURL)
 22     {
 23         pHostStart = pszURL + 7;
 24     }
 25     else
 26     {
 27         pHostStart = pszURL;
 28     }
 29     p = strchr(pHostStart, '/');
 30     if (p)
 31     {
 32         memcpy(pszHostName, pHostStart, p - pHostStart);
 33     }
 34     else
 35     {
 36         memcpy(pszHostName, pHostStart, strlen(pHostStart));
 37     }
 38 }
 39 
 40 int _tmain()
 41 {
 42     int iRet = 0;
 43     DWORD dwError = 0;
 44     BOOL bOk = FALSE;
 45 
 46     char szURL[256= { 0 };                // 主機文件,即URL
 47     char szHostName[256= { 0 };            // 主機名
 48     char szPortName[] = "80";                // 端口號
 49 
 50     if (!WinsockStartup(22))
 51     {
 52         _tcprintf(TEXT("初始化Windows Sockets失敗!"));
 53         cin.getline(szURL, 255);
 54         return -1;
 55     }
 56 
 57     addrinfo aiHints = { 0 };
 58     addrinfo * aiList;
 59 
 60     aiHints.ai_family = AF_INET;
 61     aiHints.ai_socktype = SOCK_STREAM;
 62     aiHints.ai_protocol = IPPROTO_TCP;
 63 
 64     cout<<"輸入URL:";
 65     cin.getline(szURL, 255);
 66 
 67     if (strcmp(szURL, ""== 0)
 68     {
 69         strcpy(szURL, DEFAULT_URL);
 70         cout<<DEFAULT_URL<<endl;
 71     }
 72 
 73     ParseTheURL(szURL, szHostName);
 74 
 75     if (getaddrinfo(szHostName, szPortName, NULL, &aiList) != 0)
 76     {
 77         _tcprintf_s(TEXT("getaddrinfo失敗:%d"), WSAGetLastError());
 78         WSACleanup();
 79         cin.getline(szURL, 255);
 80         return -1;
 81     }
 82 
 83     SOCKET s;
 84     for (addrinfo * aiPtr = aiList; aiPtr != NULL; aiPtr = aiPtr->ai_next)
 85     {
 86         s = socket(aiList->ai_family, aiList->ai_socktype, aiList->ai_protocol);
 87         if (s == INVALID_SOCKET)
 88         {
 89             _tcprintf_s(TEXT("socket創建失敗:%d"), WSAGetLastError());
 90             continue;
 91         }
 92 
 93         if (connect(s, aiPtr->ai_addr, aiPtr->ai_addrlen) == SOCKET_ERROR)
 94         {
 95             closesocket(s);
 96             s = INVALID_SOCKET;
 97             _tcprintf_s(TEXT("connect失敗:%d"), WSAGetLastError());
 98             continue;
 99         }
100         break;
101     }
102 
103     freeaddrinfo(aiList);
104 
105     if (s == INVALID_SOCKET)
106     {
107         WSACleanup();
108         cin.getline(szURL, 255);
109         return -1;
110     }
111 
112     char requestData[512= { 0 };
113     sprintf(requestData, "GET %s HTTP/1.1\r\n", szURL);
114     SendData(s, requestData);
115     //SendData(s, "GET / HTTP/1.1\r\n");
116     sprintf(requestData, "Host:%s\r\n", szHostName);
117     SendData(s, requestData);
118     SendData(s, "Accept: */*\r\n");
119     SendData(s, "User-Agent: Mozilla/4.0(compatible; MSIE 5.00; Windows NT)\r\n");
120     SendData(s, "Connection:Close\r\n");
121     //SendData(s, "Connection:Keep-Alive\r\n");
122     SendData(s, "\r\n");
123     SendData(s, "\r\n");//最后要加空行
124 
125     BOOL done = FALSE;
126     char buffer[1024= { 0 };
127     int l, chars = 0;
128 
129     // 打印http響應的頭部
130     while (!done)
131     {
132         l = recv(s, buffer, 10);
133         if (l <= 0)
134             done = TRUE;
135         switch(*buffer)
136         {
137         case '\r':
138             break;
139         case '\n':
140             if(chars == 0)
141                 done = TRUE;
142             chars = 0;            // 表示另起一行
143             break;
144         default:
145             ++chars;
146             break;
147         }
148         printf("%c",*buffer);
149     }
150 
151     // 接收正文部分
152     int sum = 0;
153     do
154     {
155         l = recv(s, buffer, sizeof (buffer) - 10);
156         if( l <= 0 )
157             break;
158         sum += l;
159         *(buffer + l) = 0;
160         printf(buffer);
161     } while( l > 0 );
162 
163     //這里輸出正文部分大小,發現其實和響應消息頭部的Content-length大小是一樣的
164     //這樣就可以檢查是否接受完畢
165     printf("\n\n大小 = %d字節\n",sum);
166 
167     WSACleanup();
168 
169     cin.getline(szURL, 255);
170     return 0;
171 }

posted on 2010-03-01 10:43 小虎無憂 閱讀(1868) 評論(0)  編輯 收藏 引用 所屬分類: Network


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

導航

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国产精品久久久久久电车| 亚洲国产精品欧美一二99| 欧美一区二区私人影院日本| 一区二区日韩精品| 国产亚洲a∨片在线观看| 牛人盗摄一区二区三区视频| 狂野欧美一区| 久久综合成人精品亚洲另类欧美| 亚洲深夜福利在线| 欧美不卡视频一区发布| 模特精品裸拍一区| 久久xxxx| 欧美精品在线免费| 欧美亚洲成人网| 国产夜色精品一区二区av| 国产在线精品成人一区二区三区| 国产亚洲在线| 亚洲私拍自拍| 欧美好骚综合网| 欧美激情按摩| 在线午夜精品自拍| 亚洲毛片一区二区| 91久久精品日日躁夜夜躁欧美| 亚洲欧美国产va在线影院| 亚洲最快最全在线视频| 欧美在线视频在线播放完整版免费观看 | 欧美不卡在线视频| 亚洲精品孕妇| 久久成人免费日本黄色| 欧美深夜福利| 国产一区二区av| 亚洲一区影音先锋| 91久久在线| 老巨人导航500精品| 欧美国产日韩一区| 亚洲国产第一页| 久久久久久自在自线| 午夜久久资源| 激情文学一区| 久久久久久一区二区| 亚洲视频在线播放| 久久亚洲精品一区| 久久免费国产| 亚洲国产精品va在线看黑人| 亚洲午夜久久久久久久久电影网| 欧美激情四色| 欧美精品激情| 在线一区二区三区四区五区| 亚洲一区二区三区在线| 国产精品久久午夜夜伦鲁鲁| 99精品国产一区二区青青牛奶| 亚洲欧美综合v| 亚洲欧美综合精品久久成人| 久久久久免费视频| 99国产精品国产精品久久| 久久精品视频在线免费观看| 欧美一区二区三区在线免费观看| 欧美国产精品人人做人人爱| 欧美成人中文| 日韩一级片网址| 免费成人av资源网| 一级日韩一区在线观看| 免费日韩精品中文字幕视频在线| av成人免费观看| 亚洲国内高清视频| 亚洲美女一区| 亚洲激情在线播放| 欧美日韩理论| 久久亚洲综合| 先锋影音国产精品| 亚洲一区二区三区免费观看| 欧美精品在线一区二区| 亚洲黄色av| 亚洲欧美在线免费观看| 免费成人高清| 亚洲伦理中文字幕| 精品动漫一区| 亚洲欧美国产不卡| 久久激情视频久久| 精品91久久久久| 欧美a级大片| 亚洲精品视频在线观看网站| 一区二区三区鲁丝不卡| 国产精品国产三级国产专区53| 亚洲欧美清纯在线制服| 国产精品99久久久久久宅男 | 亚洲九九爱视频| 99精品视频免费全部在线| 欧美成人精品影院| 亚洲一区久久久| 欧美精品在线免费观看| 亚洲欧洲在线播放| 一区二区精品| 国产日韩精品一区二区三区在线| 亚洲在线播放| 久久中文字幕导航| 亚洲区中文字幕| 欧美精品一区二区高清在线观看| 亚洲精品在线一区二区| 午夜精品久久久久久久99黑人| 国产免费亚洲高清| 亚洲欧美另类久久久精品2019| 99在线精品视频在线观看| 欧美一区二区视频网站| 性亚洲最疯狂xxxx高清| 亚洲国产成人不卡| 一区二区三区在线高清| 亚洲国产精品久久91精品| 亚洲国产日本| 午夜精品剧场| 欧美91大片| 亚洲国产精品福利| 亚洲国产婷婷香蕉久久久久久| 亚洲欧美国产高清va在线播| 亚洲国产一区二区三区高清| 韩国一区二区三区美女美女秀| 国产日本欧美一区二区三区在线| 国产农村妇女毛片精品久久麻豆 | 欧美视频日韩| 国产伦一区二区三区色一情| 国产一区二区久久久| 玉米视频成人免费看| 在线播放豆国产99亚洲| 亚洲国语精品自产拍在线观看| 日韩视频一区二区在线观看 | 久久精品国产在热久久| 美女图片一区二区| 一区二区三区视频免费在线观看| 亚洲一区在线直播| 久久久久在线| 国产精自产拍久久久久久| 国产视频一区二区三区在线观看| 在线国产欧美| 欧美中文在线免费| 日韩小视频在线观看专区| 欧美专区日韩视频| 国产精品裸体一区二区三区| 亚洲人成久久| 蜜桃av噜噜一区| 久久se精品一区精品二区| 国产精品高潮久久| 亚洲精品欧美| 亚洲高清自拍| 老司机67194精品线观看| 国产真实久久| 久久精品男女| 欧美一区二区三区日韩视频| 国产欧美日本一区视频| 亚洲欧美日韩精品久久亚洲区| 一区二区三区日韩精品| 欧美大香线蕉线伊人久久国产精品| 亚洲女同在线| 国产精品卡一卡二| 亚洲一区免费观看| 在线综合亚洲| 国产亚洲激情视频在线| 蜜桃久久av| 欧美国产日本韩| 亚洲在线1234| 久久精品国产91精品亚洲| 在线 亚洲欧美在线综合一区| 欧美成人午夜视频| 欧美日韩美女在线| 久久久久九九视频| 欧美成熟视频| 亚洲欧美日韩综合一区| 久久精品国产视频| 亚洲精品国产精品国自产观看浪潮 | 一区二区三区在线免费观看| 欧美1区2区| 国产精品日产欧美久久久久| 欧美777四色影视在线| 欧美日韩一区在线| 免费不卡中文字幕视频| 国产精品mm| 亚洲国产女人aaa毛片在线| 国产精品网曝门| av成人黄色| 一区二区欧美激情| 牛夜精品久久久久久久99黑人| 欧美亚洲三区| 国产欧美日本一区二区三区| 亚洲精品久久久久久久久久久久久| 国产综合色在线| 亚洲一区二区在线免费观看视频| 日韩网站在线观看| 毛片av中文字幕一区二区| 久久综合给合久久狠狠色| 国产精品一区久久久久| 亚洲少妇诱惑| 欧美一区=区| 国产一区99| 久久久久国产精品厨房| 在线播放不卡| 性欧美长视频| 久久久综合视频| 激情六月综合| 老司机成人在线视频| 日韩一二三区视频| 香蕉久久精品日日躁夜夜躁|