Python,Detect是一个需要HTTPS和HTTP的URL

时间:2014-05-20 15:53:32

标签: http python-2.7 https urllib2 urllib

使用python标准库,有没有办法确定给定的Web地址是应该使用HTTP还是HTTPS?如果您使用HTTP访问某个站点://.com是否有一个标准错误代码,表示他们应该是“HTTPS”而不是http?

谢谢

1 个答案:

答案 0 :(得分:4)

你做过任何类型的测试吗?

您的问题的简短,早期答案是: 由于重定向,不存在应该使用...它是您的偏好,或者是服务器决定。

某些服务器仅允许https,当您调用http时,会返回302代码。

因此,如果您的目标是从给定的网址加载https,只需尝试回退到正常的http。

我建议您只发送HEAD请求,以便在https连接正在侦听时能够非常快速地识别。我不建议您检查端口443(ssl),因为有时人们不遵守该规则,https协议将确保您处于https而不是假443端口。

一些代码:

#!/usr/bin/env python
#! -*- coding: utf-8 -*-

from urlparse import urlparse
import httplib, sys

def check_url(url):
  url = urlparse(url)
  conn = httplib.HTTPConnection(url.netloc)   
  conn.request("HEAD", url.path)
  if conn.getresponse():
    return True
  else:
    return False

if __name__ == "__main__":
  url = "http://httpbin.org"
  url_https = "https://" + url.split("//")[1]
  if check_url(url_https):
    print "Nice, you can load it with https"
  else:
    if check_url(url):
      print "https didn't load, but you can use http"
  if check_url(url):
    print "Nice, it does load with http too"