我需要在Django中实现HTTP代理,我的Google Safari会引导我进入一个名为django-webproxy的项目。
虽然不再维护,但很简单。大多数逻辑依赖于一个简单的代理中间件类,它拦截对Django WSGI服务器的所有请求并处理它。
如果Middleware返回任何数据,WSGI服务器只是将其传递回客户端,但如果它什么也没有返回,Django只是通过传递给其他中间件来处理请求。
一切正常,但是我需要实现代理身份验证,这意味着我必须使用Proxy-Authenticate
标头向客户端发送407状态代码。 Django不允许这样做,因为它是逐跳头,Django抛出异常。我如何破解/强制/破坏Django允许我发送逐跳标头?
仅供参考,我可以找到中间件类的代码here。
答案 0 :(得分:2)
from django.core.servers import basehttp
del basehttp._hop_headers['proxy-authenticate']
del basehttp._hop_headers['proxy-authorization']
这对我有用。
答案 1 :(得分:0)
django.core.servers.basehttp._hop_headers
不再与我们{strike> 出现在basehttp
module中(自Django 1.10开始)。
我知道两种更改方法:
启动服务器like so:
$ python -O ./manage.py runserver --noreload
import wsgiref.util
wsgiref.util._hoppish = {
'connection': 1, 'keep-alive':1,
'te':1, 'trailers':1, 'transfer-encoding':1,
'upgrade':1
}.__contains__