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

[轉]利用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創(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響應的頭部
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ā)現其實和響應消息頭部的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 小虎無憂 閱讀(1868) 評論(0)  編輯 收藏 引用 所屬分類: Network


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


<2025年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

導航

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久蜜臀精品av| 国产精品免费区二区三区观看| 一区二区成人精品| 夜夜爽av福利精品导航 | 亚洲国产成人一区| 亚洲丰满在线| 国产婷婷色一区二区三区四区| 午夜久久影院| 久久精品国产欧美亚洲人人爽 | 久久精品国产2020观看福利| 性久久久久久久久久久久| 欧美裸体一区二区三区| 亚洲第一综合天堂另类专| 国产精品久久久久久模特| 夜夜嗨av色综合久久久综合网| 国产主播一区| 在线观看欧美一区| 亚洲一区二区三区视频播放| 狂野欧美激情性xxxx| 欧美性大战久久久久久久蜜臀| 久久精品国产久精国产爱 | 亚洲欧美视频一区| 亚洲激情电影中文字幕| 欧美日韩直播| 性欧美video另类hd性玩具| 欧美一区在线视频| 国产精品视频xxxx| 亚洲小说欧美另类社区| 91久久在线观看| 美女免费视频一区| 伊人夜夜躁av伊人久久| 国产精品乱码| 欧美一区二视频| 性欧美1819性猛交| 久久久亚洲高清| 欧美一区二区大片| 久久国产精品网站| 99精品热视频只有精品10| 亚洲无吗在线| 亚洲欧美日本视频在线观看| 国内久久精品| 国产综合精品一区| 欧美日本国产一区| 久久se精品一区二区| 久久伊人精品天天| 日韩一级免费| 亚洲二区在线| 亚洲国产精彩中文乱码av在线播放| 久久久久久久久综合| 欧美在线关看| 欧美伊人久久| 亚洲一区3d动漫同人无遮挡| 亚洲毛片播放| 一区二区高清在线观看| 亚洲一区一卡| 亚洲一区二区在线看| 一区二区免费看| 亚洲图片在区色| 久久亚洲私人国产精品va媚药| 亚洲人www| 欧美一区二区三区免费看| 性做久久久久久| 欧美激情一区二区三区蜜桃视频| 久久这里只有| 久久婷婷国产麻豆91天堂| 国内精品写真在线观看| 99视频+国产日韩欧美| 欧美一二区视频| 欧美一级午夜免费电影| 久久久久久亚洲精品不卡4k岛国| 久久国产主播| 午夜在线视频一区二区区别| 国产精品久久久久999| 国产精品99久久久久久久久久久久 | 亚洲国产精品久久91精品| 激情五月***国产精品| 午夜精品www| 亚洲性av在线| 国产精品天美传媒入口| 日韩一区二区免费看| 久久综合久久综合久久| 久久精品99国产精品| 国产欧美日韩一区二区三区在线 | 亚洲一区日本| 国产农村妇女毛片精品久久麻豆| 欧美另类高清视频在线| 久热精品在线视频| 国产精品一区久久久久| 日韩一级网站| 国产精品普通话对白| 欧美一级理论片| 麻豆成人综合网| 亚洲美女少妇无套啪啪呻吟| 最新中文字幕亚洲| 国产精品麻豆成人av电影艾秋| 亚洲专区免费| 日韩亚洲欧美成人| 亚洲精品影视在线观看| 夜夜爽www精品| 欧美日韩国语| 亚洲欧洲一区| 99视频有精品| 免费久久精品视频| 亚洲激情视频在线观看| 欧美18av| 亚洲欧美亚洲| 欧美成人免费在线观看| 亚洲一区免费看| 久久蜜桃香蕉精品一区二区三区| 久久9热精品视频| 亚洲三级观看| 欧美特黄一区| 日韩亚洲欧美中文三级| 亚洲精品一区二区三区婷婷月 | 麻豆精品在线观看| 久久国产精品99久久久久久老狼 | 亚洲午夜在线观看| 国产私拍一区| 久久综合亚洲社区| 亚洲午夜精品久久久久久app| 狼人社综合社区| 黑人操亚洲美女惩罚| 久久精品国产亚洲精品| 久久精品网址| 国产伦精品一区二区三区四区免费| 欧美1区视频| 日韩亚洲视频在线| 欧美—级高清免费播放| 一本色道**综合亚洲精品蜜桃冫 | 亚洲午夜一二三区视频| 久久久久久网| 夜夜嗨一区二区| 又紧又大又爽精品一区二区| 国产精品九九久久久久久久| 久久精品夜色噜噜亚洲a∨| 亚洲小说欧美另类社区| 亚洲影院一区| 亚洲激情不卡| 久久久久一区二区三区四区| 欧美在线视频二区| 午夜精品视频在线观看| 亚洲免费高清视频| 午夜视频一区在线观看| 在线视频精品一区| 国模大胆一区二区三区| 国产日本亚洲高清| 国产精品嫩草久久久久| 欧美日韩精品系列| 欧美剧在线免费观看网站| 欧美精品少妇一区二区三区| 亚洲男女毛片无遮挡| 一本久道久久综合中文字幕| 亚洲成人资源网| 亚洲麻豆av| 亚洲小说欧美另类社区| 久久久久综合| 亚洲天堂网站在线观看视频| 亚洲免费在线精品一区| 国产日本欧美视频| 亚洲性视频网站| 亚洲精品美女在线观看播放| 一本不卡影院| 亚洲一区二区三区精品在线观看 | 一本色道久久综合狠狠躁篇的优点| 国产一区二区三区久久 | 久久精品欧美| 欧美天堂亚洲电影院在线播放| 免费人成网站在线观看欧美高清| 欧美呦呦网站| 国产日本精品| 永久域名在线精品| 欧美韩日视频| 欧美日韩精品一区视频| 国产精品亚洲一区二区三区在线| 欧美午夜精品伦理| 亚洲精品一区二区在线观看| 亚洲国产成人一区| 久久天天狠狠| 99精品欧美一区| 亚洲电影免费观看高清| 亚洲一级片在线看| 国产精品久久亚洲7777| 日韩视频一区二区在线观看| 欧美va亚洲va日韩∨a综合色| 久久精品二区三区| 狠狠狠色丁香婷婷综合久久五月| 久久精品国产欧美激情| 亚洲欧美另类国产| 国产精品美女久久久久久2018 | 99精品视频一区| 男女视频一区二区| 一区二区欧美视频| 性欧美xxxx大乳国产app| 国产精品国产三级国产普通话99 | 亚洲国产综合在线看不卡| 亚洲欧美激情在线视频| 欧美日韩在线看| 亚洲午夜av电影| 久久男人av资源网站| 99精品久久免费看蜜臀剧情介绍|