为什么在python中,从conn.getresponse().status中我会得到两种不同的状态码?

2024-10-01 07:19:50 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我想检查一个URL是否可以从python访问,我从google得到了以下代码:

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。 如果我把它传递给函数,效果就很好了。这个责任状态是302。但是,如果在端口443的末尾添加端口https://eurotableau.nomisonline.com:443,它将返回false。这个责任状态是400。我在googlechrome中尝试了这两个URL,它们都有效。所以我的问题是为什么会这样?不管怎样,我可以包括端口值,仍然得到有效的责任状态值(<;400)?谢谢。你知道吗


Tags: 端口代码httpscomurl状态defgoogle
2条回答

如果您不需要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和协议://user@URL:您的端口。 什么都不用担心。你知道吗

改用http.client.HTTPSConnection。普通的旧HTTPConnection忽略作为URL一部分的协议。你知道吗

相关问题 更多 >