所以我想检查一下是否可以从python访问URL,我从googling获取了这段代码:
def checkUrl(url):
p = urlparse(url)
conn = http.client.HTTPConnection(p.netloc)
conn.request('HEAD', p.path)
resp = conn.getresponse()
return resp.status < 400
以下是我的网址:https://eurotableau.nomisonline.com。 如果我把它传递给函数,它工作正常。 resp.status是302.但是,如果我在其末尾添加一个端口443 https://eurotableau.nomisonline.com:443,则返回false。 resp.status是400.我在谷歌浏览器中尝试了两个网址,两者都有效。所以我的问题是为什么会发生这种情况?无论如何,我可以包含端口值,仍然获得有效的resp.status值(&<400)?感谢。
答案 0 :(得分:0)
请改用http.client.HTTPSConnection
。普通旧HTTPConnection
忽略作为URL一部分的协议。
答案 1 :(得分:0)
如果您不需要HEAD方法但只想检查主机是否可用,那么为什么不这样做:
from urllib2 import urlopen
try:
u = urlopen("https://eurotableau.nomisonline.com")
u.close()
print "Everything fine!"
except Exception, e:
if hasattr(e, "code"):
print "Server is there but something is wrong with rest of URL"
else: print "Server is on vacations or was never there!"
print e
这将与服务器建立连接,但除非您阅读,否则不会下载任何数据。它只会读取几个KB来获取标题(就像使用HEAD方法时)并等待您请求更多。但你会在那里关闭它。
因此,您可以捕获异常并查看问题所在,或者如果没有异常,只需关闭连接即可。
urllib2将为您整理地处理HTTPS和protocol:// user @ URL:PORT。 不用担心任何事情。