【问题标题】:HTTP connection parsing failsHTTP 连接解析失败
【发布时间】:2015-12-06 04:04:54
【问题描述】:

我正在尝试在parse_ip() 中调用connect() 函数,该函数将通过网页搜索输入IP 以找到匹配项。 为列表THREAT 的每个元素调用Connect 函数。 这是我的代码:

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

def parse(ip):
    counter = 0
    ioc_list = []
    for filename, source in THREAT.iteritems():
        c = connect(source)
        for line in c:
            if line.startswith("/") or line.startswith('\n') or line.startswith("#"):
                pass
            else:
                counter += 1
                d = 0
                while d < len(ip):
                    if ip[d] in line:
                        print ip[d], source

                    d +=1

在运行脚本时,解析页面无法连接,最后我收到以下错误:

[!] 无法连接到:http://... 对于 c 中的行:TypeError:'NoneType' 对象不可迭代

谁能帮我弄清楚这里面出了什么问题。

【问题讨论】:

  • 你为什么不尝试在connect() 中捕获并打印异常?
  • 暂时删除 try/except 块以显示堆栈跟踪,这比您那里的内容更有帮助。当你最终弄清楚时,一定要捕获一个特定的异常并处理它。不要以您当前的方式捕获所有异常:这使得调试问题变得困难。

标签: python python-2.7 python-requests


【解决方案1】:

requests 无法建立与服务器的连接。引发一个异常,然后在 bare except 子句中处理该异常。没有显示有关异常的信息,因此很难诊断实际的连接问题。

connect() 异常之后将None 返回给调用者,然后调用者尝试对其进行迭代。这就是导致TypeError 的原因。

为什么不尝试打印异常?

def connect(url):
    sessions = requests.Session()
    print "Connecting with", url
    try:
        r = sessions.get(url,
                        headers = create_basic_headers(),
                        proxies = {'http': HTTP_PROXY, 'https': HTTPS_PROXY})
        return r
    except requests.exceptions.ConnectionError as exc:
        sys.stdout.write('[!] Could not connect to: %s\n' % url)
        sys.stdout.write('Exception: %s' % exc)

希望这会告诉您连接失败的原因。

接下来,您需要检查parse()connect() 的返回值。比如:

c = connect(source)
if c is not None:
    for line in c:
        ....

或者,您可以在connect() 中重新引发异常,并让parse() 处理它。

【讨论】:

  • 谢谢阿霍克。捕获详细的异常帮助我发现连接由于防火墙设置而被拒绝。放大它们有助于使事情正常进行。谢谢!
  • @abhinavsingh:很高兴听到。接受有关裸 except: 语句的建议。如您所见,它们使调试变得困难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多