为什么HTTPConnection不起作用?非数字端口

时间:2017-07-17 19:58:04

标签: python httplib

我正在尝试使用httplib来检查30k +网站列表中的每个网址是否仍然可用。从.csv文件读入每个URL,并将其读入矩阵,然后该矩阵通过文件中每个URL的for循环。之后,(我的问题所在),我运行一个函数runInternet(url),它接受url字符串,如果url工作则返回true,如果不工作则返回false。 我已经使用this作为我的基线,并且还调查了this。虽然我已经尝试了两种,但我不太了解后者,也没有效果......

def runInternet(url):
    try:
        page = httplib.HTTPConnection(url)
        page.connect()
    except httplib.HTTPException as e:
        return False
    return True

但是,之后,所有链接都被声明为已损坏!我随机选择了一些有效的工作,当我将它们输入浏览器时它们就可以工作......那么发生了什么?我把问题点缩小到这条线:         page = httplib.HTTPConnection(url)

编辑:我尝试输入“www.google.com”以换取网址,程序正常运行,当我尝试打印e时,它显示非数字端口......

1 个答案:

答案 0 :(得分:0)

您可以通过允许HTTPException传播而不是捕获它来解决此问题。特定的异常类型可能有助于理解错误。

我怀疑问题就在这一行:

page = httplib.HTTPConnection(url)

构造函数的第一个参数不是URL。相反,它是一个主机名。例如,此代码示例将URL传递给构造函数失败:

page = httplib.HTTPConnection('https://www.google.com/')
page.connect()

httplib.InvalidURL: nonnumeric port: '//www.google.com/'

相反,如果我将主机名传递给构造函数,然后将URL传递给request方法,那么它可以工作:

conn = httplib.HTTPConnection('www.google.com')
conn.request('GET', '/')
resp = conn.getresponse()
print resp.status, resp.reason

200 OK

供参考,以下是HTTPConnection的相关简略文档:

class HTTPConnection
 |  Methods defined here:
 |  
 |  __init__(self, host, port=None, strict=None, timeout=<object object>, source_address=None)
 ...
 |  request(self, method, url, body=None, headers={})
 |      Send a complete request to the server.