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

[轉(zhuǎn)]利用Winsock模擬HTTP的GET請求

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

  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失?。?/span>"));
 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創(chuàng)建失?。?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響應(yīng)的頭部
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     //這里輸出正文部分大小,發(fā)現(xiàn)其實和響應(yīng)消息頭部的Content-length大小是一樣的
164     //這樣就可以檢查是否接受完畢
165     printf("\n\n大小 = %d字節(jié)\n",sum);
166 
167     WSACleanup();
168 
169     cin.getline(szURL, 255);
170     return 0;
171 }

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


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導(dǎo)航

統(tǒng)計

常用鏈接

留言簿

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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久久精品综合妖精| 亚洲国产欧美一区二区三区久久| 欧美粗暴jizz性欧美20| av成人免费观看| 亚洲精品免费网站| 欧美视频在线观看| 欧美怡红院视频| 欧美一区二区福利在线| 激情校园亚洲| 最新成人av网站| 国产精品久在线观看| 久久精品国产91精品亚洲| 久久精品综合| 99天天综合性| 亚洲欧美日韩国产成人| 国外成人在线| 亚洲国产另类精品专区| 欧美午夜在线一二页| 欧美怡红院视频| 免费精品视频| 亚洲欧美视频一区| 久久综合免费视频影院| 一区二区三区视频观看| 亚洲精品一区二区三区樱花 | 亚洲福利一区| 欧美日韩国产片| 性伦欧美刺激片在线观看| 欧美在线视频导航| 日韩视频一区二区在线观看 | 午夜在线不卡| 最近看过的日韩成人| av成人免费观看| 国产自产精品| 一本色道久久综合| 韩日欧美一区| 日韩亚洲精品电影| 久久中文字幕导航| 欧美日韩高清在线| 媚黑女一区二区| 国产伦精品一区二区三区免费迷| 欧美激情导航| 国产一区二区三区黄视频| 亚洲精品一区二区三区不| 国产视频精品xxxx| 一本久久综合亚洲鲁鲁| 最新高清无码专区| 久久久国产精品一区| 亚洲欧美日韩综合aⅴ视频| 欧美精品v日韩精品v国产精品| 久久―日本道色综合久久| 国产精品国产亚洲精品看不卡15| 欧美国产免费| 狠狠干狠狠久久| 欧美呦呦网站| 午夜精品久久久久久99热| 欧美日韩国产片| 亚洲人成毛片在线播放| 一区二区三区在线免费观看| 亚洲一区久久久| 中文日韩欧美| 欧美日韩国产影片| 亚洲国产精选| 亚洲美女精品一区| 欧美18av| 亚洲大黄网站| 亚洲精品欧美精品| 男人的天堂亚洲| 欧美高清在线视频观看不卡| 一区二区三区在线免费播放| 久久成人在线| 久久久久在线观看| 国产一区二区在线免费观看| 午夜精品久久| 久久久夜夜夜| 在线观看国产日韩| 老司机亚洲精品| 亚洲电影免费观看高清完整版在线| 亚洲二区免费| 欧美freesex交免费视频| 欧美高清在线观看| 亚洲美女毛片| 国产精品va| 午夜激情综合网| 久久精品一区二区三区不卡牛牛| 国产在线视频不卡二| 久久久青草婷婷精品综合日韩| 女人色偷偷aa久久天堂| 亚洲日韩视频| 欧美午夜视频在线观看| 亚洲欧美亚洲| 欧美va亚洲va国产综合| 最新国产拍偷乱拍精品 | 在线亚洲精品| 国产美女精品一区二区三区| 欧美专区第一页| 亚洲国产精品123| 亚洲砖区区免费| 久久综合九色九九| 亚洲精品中文字幕在线| 欧美三级视频在线| 午夜一区二区三区不卡视频| 欧美不卡福利| 亚洲综合激情| 亚洲国产成人午夜在线一区| 欧美日韩直播| 久久福利电影| 亚洲精品久久久久中文字幕欢迎你| 亚洲在线视频免费观看| 国产亚洲欧美日韩日本| 欧美大片国产精品| 亚洲欧美综合精品久久成人| 牛牛影视久久网| 亚洲一区二区三区午夜| 一区在线视频| 国产精品久久久久久亚洲调教| 久久久久综合网| 国产精品99久久不卡二区| 巨胸喷奶水www久久久免费动漫| 999在线观看精品免费不卡网站| 国产日韩欧美视频| 欧美久久成人| 久久久精品欧美丰满| 一区二区三区成人| 亚洲电影观看| 狼人社综合社区| 欧美一区二区三区日韩| 日韩视频永久免费观看| 国内外成人免费视频| 欧美视频在线看| 欧美成人精品在线| 久久成人免费视频| 亚洲一区精品视频| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品久久久一区麻豆最新章节| 欧美阿v一级看视频| 久久国产精品99国产精| 亚洲性xxxx| 99国产成+人+综合+亚洲欧美| 欧美国产日韩xxxxx| 久久精品亚洲| 欧美一区二区在线观看| 在线中文字幕一区| 亚洲精品国精品久久99热| 精品福利免费观看| 国产亚洲欧美一区二区| 国产精品美女久久久久av超清 | 欧美本精品男人aⅴ天堂| 久久精品国产第一区二区三区| 亚洲午夜精品久久久久久app| 亚洲欧洲一区二区三区在线观看| 欧美va亚洲va国产综合| 欧美91视频| 欧美激情二区三区| 男女激情视频一区| 美女黄网久久| 欧美大秀在线观看| 欧美激情中文不卡| 亚洲电影免费在线观看| 亚洲经典三级| 日韩视频在线观看| 在线一区欧美| 午夜精品短视频| 一本久久综合亚洲鲁鲁五月天 | 亚洲精品欧洲| 一本不卡影院| 亚洲一区二区三区中文字幕| 亚洲一区二区三区四区视频| 亚洲影院免费观看| 性做久久久久久久免费看| 久久av免费一区| 久久欧美中文字幕| 免费在线看一区| 欧美日韩精品是欧美日韩精品| 欧美日韩亚洲一区在线观看| 国产精品国产三级国产专播精品人 | 欧美一区久久| 久久久综合香蕉尹人综合网| 女女同性精品视频| 亚洲日韩欧美视频| 亚洲视频axxx|