繁体   English   中英

使用“请求” Python库时解析HTTP响应时出错

[英]Error parsing HTTP resposne while using “requests” python library

我正在尝试为这些页面上列出的IP地址解析HTML页面列表。 最初,我在parse_ip()函数内调用requests()参数的地方,代码运行良好。 随着功能的扩展,我决定将HTTP连接部分放入单独的connect()函数中,然后在parse函数中调用它。 但是自从这样做以来,即使我正在搜索列表中的HTML页面之一中列出的IP地址,我的解析也不会返回任何结果。

这是我的代码段:

def connect():
    for filename, source in threat.iteritems():
        sessions = requests.Session()
        print "Now connecting with", source
        r = sessions.get(source,
                         headers = create_basic_headers(),
                         proxies = {'http': HTTP_PROXY, 'https': HTTPS_PROXY})
def parse(ip):
    counter = 0
    ioc_list = []
    r = connect()
    while r != None:
        for line in r:
            if line.startswith("/") or line.startswith('\n') or line.startswith("#"):
                pass
            else:
                if ip in line:
                    ioc_list.append(ip)
                    print ioc_list
                    counter += 1

任何人都可以指出我要去哪里了。 def parse(ip) ,这里ip作为参数传递。

*****编辑****

根据评论,我将return添加到connect()函数。 循环现在能够解析HTML页面作为输入参数,但是我遇到了一个变量问题。 这是我修改的代码:

def connect():
    for filename, source in threat.iteritems():
        sessions = requests.Session()
        print "Now connecting with", source
        try:
            r = sessions.get(source,
                            headers = create_basic_headers(),
                            proxies = {'http': HTTP_PROXY, 'https': HTTPS_PROXY})
            return r
        except:
            sys.stdout.write('[!] Could not connect to: %s\n' % source)


def parse(ip):
    counter = 0
    ioc_list = []
    r = connect()
    while r != None:
        for line in r:
            if line.startswith("/") or line.startswith('\n') or line.startswith("#"):
                pass
            else:
                if ip in line:
                     ioc_list.append(ip)
                     print ioc_list, source
                     counter += 1

这导致以下错误:

第55行,在parse_ip打印ioc_list中,源NameError:全局名称'source'未定义

有解决这个问题的想法吗?

您已在您发布的代码的第二行(从底部开始)的行中向print语句添加了另一个参数:

print ioc_list, source

该行上在名为source作用域中没有变量,因此这就是您得到的错误。 您也很可能不想通过该循环在每次迭代中都打印出列表的内容-您的意思是改为使用

print ip

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM