我试图测试是否存在一个简单的网址列表,当我只测试一个网址时代码可以正常工作,但是当我尝试添加网址数组时,它会中断。
知道我做错了什么吗?
单个网址代码
import httplib
c = httplib.HTTPConnection('www.example.com')
c.request("HEAD", '')
if c.getresponse().status == 200:
print('web site exists')
破碎的数组代码
import httplib
Urls = ['www.google.ie', 'www.msn.com', 'www.fakeniallweb.com', 'www.wikipedia.org', 'www.galwaydxc.com', 'www.foxnews.com', 'www.blizzard.com', 'www.youtube.com']
for x in Urls:
c = httplib.HTTPConnection(x)
c.request("HEAD", '')
if c.getresponse().status == 200:
print('web site exists')
else:
print('web site' + x + 'un-reachable')
#To prevent code from closing
input ()
答案 0 :(得分:0)
问题不在于您是否将其作为数组执行,而是您的某个网址(www.fakeniallweb.com)与其他网址存在不同的问题。
我认为因为DNS无法解析,所以不能像你一样请求HEAD。所以除了检查响应代码200之外,还需要额外的检查。
也许你可以这样做:
try:
c.request("HEAD", '')
if c.getresponse().status == 200:
print('web site exists')
else:
print('website does not exist')
except gaierror as e:
print('Error resolving DNS')
老实说,我怀疑你会发现网站返回不同状态代码的其他情况。例如,网站可能会返回3xx范围内的重定向内容,如果您无法访问,则返回403。这并不意味着该网站不存在。
希望这能帮到你的路!
答案 1 :(得分:0)
@Dries De Rydt
感谢您的帮助,这是一个未解决的dns错误导致它崩溃。
我结束了Lib/socket.py
<强>溶液强>
import socket
Urls = ['www.google.ie', 'www.msn.com', 'www.fakeniallweb.com', 'www.wikipedia.org', 'www.galwaydxc.com', 'www.foxnews.com', 'www.blizzard.com', 'www.youtube.com']
for x in Urls:
try:
url = socket.gethostbyname(x)
print x + ' was reachable '
except socket.gaierror, err:
print "cannot resolve hostname: ", x, err
#To prevent code from closing
input ()
感谢您的帮助。