允许Django代理中间件中的逐跳头

时间:2010-10-08 08:57:46

标签: python django proxy

我需要在Django中实现HTTP代理,我的Google Safari会引导我进入一个名为django-webproxy的项目。

虽然不再维护,但很简单。大多数逻辑依赖于一个简单的代理中间件类,它拦截对Django WSGI服务器的所有请求并处理它。

如果Middleware返回任何数据,WSGI服务器只是将其传递回客户端,但如果它什么也没有返回,Django只是通过传递给其他中间件来处理请求。

一切正常,但是我需要实现代理身份验证,这意味着我必须使用Proxy-Authenticate标头向客户端发送407状态代码。 Django不允许这样做,因为它是逐跳头,Django抛出异常。我如何破解/强制/破坏Django允许我发送逐跳标头?

仅供参考,我可以找到中间件类的代码here

2 个答案:

答案 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开始)。

我知道两种更改方法:

  1. 启动服务器like so

    $ python -O ./manage.py runserver --noreload
    
  2. 更改wsgiref.util._hoppish

    import wsgiref.util
    wsgiref.util._hoppish = {
        'connection': 1, 'keep-alive':1,
        'te':1, 'trailers':1, 'transfer-encoding':1,
        'upgrade':1
    }.__contains__