Linux企業級項目實踐之網絡爬蟲(13)——處理user-agent

User Agent即用戶代理,是Http協議中的一部分,屬於頭域的組成部分,User Agent也簡稱UA。它是一個特殊字符串頭,是一種向訪問網站提供你所使用的瀏覽器類型及版本、操做系統及版本、瀏覽器內核、等信息的標識。經過這個標識,用戶所訪問的網站能夠顯示不一樣的排版從而爲用戶提供更好的體驗或者進行信息統計。


瀏覽器的UA字串的標準格式:瀏覽器標識 (操做系統標識; 加密等級標識; 瀏覽器語言) 渲染引擎標識版本信息。但各個瀏覽器有所不一樣。


字串說明:
一、瀏覽器標識
出於兼容及推廣等目的,不少瀏覽器的標識相同,所以瀏覽器標識並不能說明瀏覽器的真實版本,真實版本信息在 UA 字串尾部能夠找到。


二、操做系統標識瀏覽器


三、加密等級標識
N: 表示無安全加密
I: 表示弱安全加密
U: 表示強安全加密

四、瀏覽器語言
在首選項 > 常規 > 語言中指定的語言

五、渲染引擎
顯示瀏覽器使用的主流渲染引擎有:Gecko、WebKit、KHTML、Presto、Trident、Tasman等,格式爲:渲染引擎/版本信息

六、版本信息

顯示瀏覽器的真實版本信息,格式爲:瀏覽器/版本信息安全


int send_request(int fd, void *arg)
{
    int need, begin, n;
    char request[1024] = {0};
    Url *url = (Url *)arg;

    sprintf(request, "GET /%s HTTP/1.0\r\n"
            "Host: %s\r\n"
            "Accept: */*\r\n"
            "Connection: Keep-Alive\r\n"
            "User-Agent: Mozilla/5.0 (compatible; Qteqpidspider/1.0;)\r\n"
            "Referer: %s\r\n\r\n", url->path, url->domain, url->domain);

    need = strlen(request);
    begin = 0;
    while(need) {
        n = write(fd, request+begin, need);
        if (n <= 0) {
            if (errno == EAGAIN) { //write buffer full, delay retry
                usleep(1000);
                continue;
            }
            SPIDER_LOG(SPIDER_LEVEL_WARN, "Thread %lu send ERROR: %d", pthread_self(), n);
            free_url(url);
            close(fd);
            return -1;
        }
        begin += n;
        need -= n;
    }
    return 0;
}
相關文章
相關標籤/搜索