contents.lower()中的string.lower()无法正常工作

时间:2014-05-08 04:08:46

标签: python

我的功能使用套接字和代理查找WHOIS请求。

有时代理存在问题并且它不返回任何数据,所以我检查数据是否包含初始域请求,如果是,则返回结果。

但是,即使字符串数据中没有任何内容,有时也会返回TRUE。 我也试过做len(数据)> 25等,但由于某种原因,它仍然可以返回true。

        if domain.lower() in data.lower():
            obj = WhoisEntry(domain, data)
            logger.debug('WHOIS success ' + domain + ': ' + data)
            return {
                        'expiration_date':  str(obj.expiration_date),
                        'status':           str(obj.status),
                        'registrar':        str(obj.registrar)
                   }

完整代码

def whois_tcp(domain):
whois_servers = [ 'whois.verisign-grs.com', 'whois.internic.net', 'whois.crsnic.net' ]

attempts = 0

while attempts < 15:
    attempts = attempts + 1
    logger.debug('WHOIS attempt '+domain+': '+str(attempts))
    whois_host = random.choice(whois_servers)
    proxy = random.choice(proxies) # global variable from config.py
    proxy = proxy.split(':')

    try:
        s = socks.socksocket()
        s.setproxy(socks.PROXY_TYPE_SOCKS5, proxy[0], int(proxy[1]))
        s.connect((whois_host, 43))
        s.send(domain + '\n\r\n')

        data = ''
        buf = s.recv(1024)
        while len(buf):
            data += buf
            buf = s.recv(1024)
        s.close()

       #if domain.lower() not in data.lower():
       #    raise Exception(domain, 'Domain not found in WHOIS: '+data)
       #    continue

        if domain.lower() in data.lower():
            obj = WhoisEntry(domain, data)
            logger.debug('WHOIS success ' + domain + ': ' + data)
            return {
                        'expiration_date':  str(obj.expiration_date),
                        'status':           str(obj.status),
                        'registrar':        str(obj.registrar)
                   }
    except Exception, e:
        logger.error('WHOIS Lookup Failed: '+str(e))
return None

我做错了什么?

2 个答案:

答案 0 :(得分:0)

1.Try:

if str(domain).lower() in str(data).lower():
    ...

2.检查域变量的值是否为“无”或“#”;

答案 1 :(得分:0)

我添加了代码来编写每个对文件的响应,并注意到它实际上包含了whois结果

    file = open('./whois_records/'+domain, 'w')
    file.write(data)
    file.close()

不确定为什么这行代码没有在日志文件中输出数据字符串:

logger.debug('WHOIS success ' + domain + ': ' + str(data))

我发现不同的whois服务器为我提供了不同的查找结果。
例如: bpi-group.com

  1. whois.verisign-grs.com: **FREE**
  2. whois.gandi.net: **TAKEN**

此外,我需要为不同的TLD使用不同的whois服务器(com / net / org / info / biz)

目前正在使用:
- tld .whois-servers.net

代码仍然不完美,但效果更好,原始问题已经解决

def whois_tcp(domain):
    ext = tldextract.extract(domain)
    if ext.suffix == 'org':
        whois_servers = [ 'org.whois-servers.net' ]

    elif ext.suffix == 'biz':
        whois_servers = [ 'biz.whois-servers.net' ]

    elif ext.suffix == 'info':
        whois_servers = [ 'info.whois-servers.net' ]

    elif ext.suffix == 'com':
        whois_servers = [ 'com.whois-servers.net' ]

    elif ext.suffix == 'net':
        whois_servers = [ 'net.whois-servers.net' ]

    else:
        whois_servers = [ 'whois.verisign-grs.com', 'whois.internic.net', 'whois.crsnic.net' ]

    attempts = 0
    result = None

    while attempts < 15:
        attempts = attempts + 1
        logger.debug('WHOIS attempt '+domain+': '+str(attempts))
        whois_host = random.choice(whois_servers)
        proxy = random.choice(proxies) # global variable from config.py
        proxy = proxy.split(':')

        try:
            s = socks.socksocket()
            s.setproxy(socks.PROXY_TYPE_SOCKS5, proxy[0], int(proxy[1]))
            s.connect((whois_host, 43))
            s.send(domain + '\n\r\n')

            data = ''
            buf = s.recv(1024)
            while len(buf):
                data += buf
                buf = s.recv(1024)
            s.close()

            file = open('./whois_records/'+domain, 'w')
            file.write(data)
            file.close()

#           if domain.lower() not in data.lower():
#               raise Exception(domain, 'Domain not found in WHOIS: '+data)
#               continue

            if str(domain).lower() in str(data).lower():
                obj = WhoisEntry.load(domain, data)
                logger.debug('WHOIS success ' + domain + ': ' + str(data))
               return {
                            'expiration_date':  str(obj.expiration_date),
                            'status':           str(obj.status),
                            'registrar':        str(obj.registrar)
                       }
        except Exception, e:
            logger.error('WHOIS Lookup Failed: '+str(e))
    return None