Python,检测是一个URL,必须为HTTPS vs HTTP

cod*_*000 6 https http urllib urllib2 python-2.7

使用python标准库,是否可以确定给定网址应使用HTTP还是HTTPS?如果您使用HTTP://.com访问网站,是否存在标准错误代码,说“嘿,假人”应该是“ HTTPS”而不是http?

谢谢

m3n*_*nda 5

您进行了任何测试吗?

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

某些服务器只允许使用https,而当您调用http时,确实会返回302代码。

因此,如果您的目标是从给定的URL加载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"
Run Code Online (Sandbox Code Playgroud)