• <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>

            jake1036

            larbin源碼分析(十) IpSite站點的抽象類

                          IpSite站點的抽象類

             一 該類的功能
                 NamedSite中的類經過dns請求之后,就會將站點名轉換為ip,然后將url transfer到Ipsite中,由Ipsite具體完成爬蟲工作。
             二 類的具體成員參數
                    time_t lastAccess; //該IP最后獲取的時間
                    bool isInFifo;         //當該對象完成了一次fetch之后,將其加入到oksites中,并將其置為true,或者將一個url加入進fifo中
                    url *getUrl ();       //獲取隊列中的 url對象
                    IPSite ();
                    ~IPSite (); 
                    Fifo<url> tab;      //隊列中進行爬取的url列表
                     int fetch ();        //具體執行爬取

               三 具體函數實現
                   (1) 構造函數IPSite() 函數的具體實現為 lastAccess = 0 ; isInFifo = false ;
                   (2)IPSite::putUrl (url *u) 
                       將url放入IPSite的fifo隊列中,然后將isInFifo設置為true。如果lastAccess+waitDuration <= now
                       以及當期存在空閑的連接,則可以 調用fetch以進行爬取網頁。
                       否則將該IpSite加入進okSites中。
                  (3)inline url *IPSite::getUrl ()  從fifo中獲取一個url
                   (4) fetch() 函數,用以爬取網頁
                         Connexion *conn = global::freeConns->get(); //首先獲取一個空閑的連接
                         url *u = getUrl();                                          //獲取一個url
                         char res = getFds(conn, &(u->addr), u->getPort()); //然后根據url建立一個連接
                          if (res != emptyC) {       //下面則為一個具體發送http報文請求的過程
                            lastAccess = global::now;
                           conn->timeout = timeoutPage;
                          conn->request.addString("GET ");
                    if (global::proxyAddr != NULL) {
                      char *tmp = u->getUrl();
                      conn->request.addString(tmp);
                    } else {
                      conn->request.addString(u->getFile());
                    }
                    conn->request.addString(" HTTP/1.0\r\nHost: ");
                    conn->request.addString(u->getHost());
            #ifdef COOKIES
                    if (u->cookie != NULL) {
                      conn->request.addString("\r\nCookie: ");
                      conn->request.addString(u->cookie);
                    }
            #endif // COOKIES
                    conn->request.addString(global::headers);
                    conn->parser = new html (u, conn); //建立頁面解析類
                    conn->pos = 0;                              //獲取的數據中的下標位置 ,pos
                    conn->err = success;
                    conn->state = res;
                    if (tab.isEmpty()) {
                      isInFifo = false;
                    } else {
                      global::okSites->put(this);
                    }
                    return 0;
                  }
               下面附帶上一次http請求的頭部的格式
              

            GET /index.html HTTP/1.1

            Accept:text/html

            User-Agent:larbin

            Host: ioa.rising.com.cn

            Fromjiangzy@rising.com.cn


              四 總結:
                   該類IpSite主要用來向http服務器發送連接請求,并構建出對應的文件解析類html,存儲在conn中。


            posted on 2011-06-16 14:13 kahn 閱讀(546) 評論(0)  編輯 收藏 引用

            97久久综合精品久久久综合| MM131亚洲国产美女久久| 狠狠色丁香婷婷综合久久来来去| 国产精品久久久久久| 九九久久精品无码专区| 亚洲伊人久久成综合人影院| 性欧美大战久久久久久久久| 久久福利青草精品资源站免费| 国产免费久久精品99久久| 中文字幕久久亚洲一区| 国产精品久久久久久搜索| 久久人人爽人爽人人爽av| 亚洲国产另类久久久精品小说| 99久久国产亚洲高清观看2024| 久久亚洲中文字幕精品一区四| 人妻丰满AV无码久久不卡| 亚洲国产成人久久笫一页| 精品国产VA久久久久久久冰| 日韩欧美亚洲综合久久影院Ds| 激情伊人五月天久久综合| 亚洲AⅤ优女AV综合久久久| 亚洲精品美女久久777777| 久久精品亚洲乱码伦伦中文| 久久亚洲国产成人精品性色| 色综合合久久天天给综看| 久久久久中文字幕| 久久久精品国产sm调教网站| 久久99这里只有精品国产| 亚洲国产精品久久久久网站| 久久精品国产亚洲AV麻豆网站| 一本久久a久久精品综合香蕉| 麻豆精品久久精品色综合| 久久精品一区二区三区AV| 亚洲国产成人精品久久久国产成人一区二区三区综 | 热RE99久久精品国产66热| 久久99国产精品一区二区| 久久人妻少妇嫩草AV无码专区| 亚洲日本久久久午夜精品| 亚洲欧洲久久久精品| 欧美亚洲另类久久综合婷婷 | 18禁黄久久久AAA片|