Django+https 访问配置
一、简介
django-requests库发送https请求
import requests
from configs_test.configs_req import HOST
from requests.packages import urllib3
from requests.packages.urllib3 import disable_warnings
requests.packages.urllib3.disable_warnings()#忽略警告
# https协议
class Login_Test:
def login_test(self, indata):
# 1、请求地址
url = f'https://10.0.0.22:8809/rpki/auto/ca_auto_register'
# 2、请求头
# 3、请求体
data = indata
# content_type:data
# 4、执行请求
res = requests.post(url, data=data, verify=False)
if __name__ == '__main__':
Login_Test().login_test({'username': 'xxxx', 'psw': 'xxxxx'})
请求https
协议的接口,需要增加以上两句:
requests.packages.urllib3.disable_warnings
()#忽略警告
res = requests.post(url, data=data, verify=False
)
django-requests库发送https请求访问项目提示如下错误。
提示错误:You're accessing the development server over HTTPS, but it only supports HTTP
二、解决方案 一
安装包
pip install django-extensions
pip install django-werkzeug-debugger-runserver
pip install pyOpenSSL
修改setting.py
在INSTALLED_APPS中增加
‘werkzeug_debugger_runserver’,
‘django_extensions’,
启动工程
python manage.py runserver_plus --cert server.crt 0.0.0.0:8809
三、解决方案 二
django中的SECURE_SSL_REDIRECT配置
在settings.py中添加SECURE_SSL_REDIRECT = True,默认下配置为SECURE_SSL_REDIRECT = False
1. 设置SECURE_SSL_REDIRECT = True
此时在浏览器发出http请求时django会重定向到https上。
以 $ python manage.py runserver启动应用,发出http请求后django后台日志如下: “GET / HTTP/1.1” 301 0 Self-signed SSL certificates are being blocked:Fix this by turning off ‘SSL certificate verification’ in Settings > General…
但此时web应用是不支持https的,报错如下 You’re accessing the development server over HTTPS, but it only supports HTTP
2. 设置SECURE_SSL_REDIRECT = False
此时http请求不会跳转到https,http此时django能正确访问。如果直接请求HTTPS时会报错如下: You’re accessing the development server over HTTPS, but it only supports HTTP.
django的https支持:sslserver插件
1.如果django需要HTTPS支持,可安装有sslserver插件:
$ pip install django-sslserver
2. 在settings.py中添加配置
SECURE_SSL_REDIRECT = False
INSTALLED_APPS = (
...
"sslserver",
...
)
3. 自带证书启动django应用
$ python manage.py runsslserver
4. 指定证书启动django应用
$ python manage.py runsslserver --certificate /path/to/certificate.crt --key /path/to/key.key 0.0.0.0:8000
当SECURE_SSL_REDIRECT = False时,http请求无响应,https请求能正确访问。 当SECURE_SSL_REDIRECT = True时,http请求会重定向https,此时django支持https,可正确访问
5.使用gunicorn启动django
#!/bin/sh
# put 8 workers as Daemon listening for HTTPS on 443
gunicorn -D -w 8 --certfile=/path/server.crt --keyfile=/path/server.key djangoProject.wsgi -b 0.0.0.0:443
# put 2 workers as Daemon listening for HTTP on port 80
gunicorn -D -w 2 bodyofchrist.wsgi -b 0.0.0.0:80