我正在尝试使用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时,它显示非数字端口......
答案 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.