Django:如何返回原始响应

Jib*_*bin 9 django response urllib2

这就是我要的.

  1. 向外部站点提交POST请求(即登录信息).
  2. 收到回复
  3. 将原始响应返回给我的客户端浏览器(包含用于登录
    验证的cookie ).
  4. 如果客户端尝试在新选项卡中访问该站点,则发现他已经登录.

我成功完成了第1步和第2步(提交了POST并收到了网站的回复).

request = urllib2.Request(url, formData, headers)
response = urllib2.urlopen(request)
Run Code Online (Sandbox Code Playgroud)

但是当我试图在视图中返回它时

return response
Run Code Online (Sandbox Code Playgroud)

我得到了以下错误

Django Version:     1.3.1
Exception Type:     AttributeError
Exception Value:    addinfourl instance has no attribute 'has_header'
Exception Location:D:\Python27\lib\site-packages\django\utils\cache.py in patch_vary_headers
Run Code Online (Sandbox Code Playgroud)

注意:我有一个csrf错误,但我使用装饰器@csrf_exempt禁用了csrf并且错误消失了

Ser*_*nko 7

您不应该直接从urlopen方法返回响应.相反,你的视图应该返回一个django的HttpResponse实例,其中body和header应该设置为原始响应中的那些:

from django.http import HttpResponse
import urllib2

def my_view(request):
    request = urllib2.Request(url, formData, headers)
    response = urllib2.urlopen(request)

    # set the body
    r = HttpResponse(response.read())

    # set the headers
    for header in response.info().keys():
        r[header] = response.info()[header]

    return r
Run Code Online (Sandbox Code Playgroud)