为什么我从python中的conn.getresponse()。status获得两个不同的状态代码?

时间:2015-07-24 16:26:36

标签: python http url https

所以我想检查一下是否可以从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)?感谢。

2 个答案:

答案 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。  不用担心任何事情。