【问题标题】:Django input request.META into requests headers?Django 将 request.META 输入到请求标头中?
【发布时间】:2015-10-13 05:00:29
【问题描述】:

我有一个 Django 应用程序,我想从我自己的网站获取一个页面,并通过传递请求的标头和 cookie 来模拟客户端请求。

middleware.py

r = requests.get('https://google.com', None, headers=request.META, cookies=request.COOKIES)

但是,我注意到在 Django 中,request.META 是大写的,并且使用下划线而不是连字符。虽然request.COOKIES 返回空,这让我相信它们不会出现在中间件中?

我错过了什么吗,这似乎很令人沮丧,因为 requests 是一个如此受欢迎的库,而 Django 是一个如此受欢迎的框架。

【问题讨论】:

    标签: python django python-requests


    【解决方案1】:

    您确定您已正确设置 cookie 吗?我用一小块自定义中间件对此进行了测试,request.COOKIES 有 cookie。这是我的观点:

    def test(request):
        response = HttpResponse('test')
        response.set_cookie('foo', 'bar')
        return response
    

    然后,在我的自定义中间件中使用ipdb 设置断点后:

    class MyMiddleware(object):
    
        def process_request(self, request):
            import ipdb; ipdb.set_trace()
    

    我可以看到设置好的 cookie:

    ipdb> request.COOKIES
    {'foo': 'bar'}
    

    【讨论】:

    • 嗯,我再测试一次。但是,主要问题是将 request.META 传递到标头参数中:P
    • 在这种情况下,我不确定您的问题是什么。您是否只是在寻找 Django 修改 request.META 中的标头键的确认?根据文档,您是对的:docs.djangoproject.com/en/1.8/ref/request-response/…
    • 我想我的问题是:有什么方法可以将 META 字典输入到请求的标头参数中吗?
    • @John 看来你能做的最好的事情就是写一些东西来扭转他们的编码策略。例如,通过从开头剥离HTTP_,将下划线转换为连字符,并将大写更改为标题大小写。在这种情况下,HTTP_FOO_BAR 将变为 Foo-Bar。您应该验证您想要的每个标题都在通过,因为从文档中看起来CONTENT_LENGTHCONTENT_TYPE 的翻译方式不同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2018-11-29
    • 2012-12-01
    • 1970-01-01
    • 2011-10-14
    • 2017-02-15
    • 1970-01-01
    相关资源
    最近更新 更多