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;
}
相关文章
相关标签/搜索