如何使用django.test.Client发出没有Content-Type标头的HTTP请求?

Jameshfisher

我有一个Django应用程序,该应用程序必须具有以下行为:如果请求没有Content-Type标头,它将返回错误响应。

为了测试此行为,我需要发出不带Content-Type标头的HTTP请求

我使用Client的类django.test模块这有很多方法,包括以下一种:

post(path, data=None, content_type=MULTIPART_CONTENT, follow=False, secure=False, **extra)

在提供的路径上发出POST请求,并返回一个Response对象,如下所述。

[...]

如果提供content_type(例如,text/xml用于XML有效负载),则数据内容将在POST请求中使用content_typeHTTPContent-Type标头按原样发送

如果您不提供的值content_type,则数据中的值将以的内容类型传输multipart/form-data在这种情况下,数据中的键值对将被编码为多部分消息,并用于创建POST数据有效负载。

文档说Content-Type,无论是否传递content_type参数,总是在请求上设置标头

那么,我还必须以其他什么方式构造一个没有Content-Type的请求呢?

help_asap

您可以通过类RequestFactory构建自定义的请求实例

生成请求后,您可以在将请求实例传递到视图之前对其进行修改。


以RequestFactory文档页面中的示例为起点,可以执行以下操作:

from django.test import TestCase, RequestFactory
from .views import my_view

class SimpleTest(TestCase):
    def setUp(self):
        # Every test needs access to the request factory.
        self.factory = RequestFactory()

    def test_details(self):
        # Create an instance of a POST request.
        request = self.factory.post('/your/url', data={'your':'data'})

        # NOW you can customise your request instance!
        # (i.e. remove the Content-Type header)
        request.META.pop('CONTENT_TYPE', None)

        # Actually use the request to test my_view() 
        # as if it were deployed at /customer/details
        response = my_view(request)
        self.assertEqual(response.status_code, 400)

request.META仅仅是一个标准的Python字典(如解释在这里),所以你可以使用

del request.META['CONTENT_TYPE']

而不是pop()删除它,但前提是您必须确定该键将在字典中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何传递HTTP标头以从API发出请求?

来自分类Dev

如何发送带有标头参数的HTTP请求?

来自分类Dev

如何为带有wreq的请求设置HTTP标头?

来自分类Dev

未使用Angular $ http设置Content-Type标头

来自分类Dev

AngularJS $ http删除请求Content-Type标头

来自分类Dev

如何使用Perl为HTTP请求发送不正确的Content-Length标头?

来自分类Dev

如何使用请求发送带有标头的PATCH请求

来自分类Dev

如何为Ionic 2中的所有请求设置默认的Http标头?

来自分类Dev

如何发送带有自定义标头的HTTP删除请求?

来自分类Dev

如何发送带有请求的HTTP / 2伪标头?

来自分类Dev

Rails:如何获取带有标头的http请求?(产品搜索API)

来自分类Dev

如何为Ionic 2中的所有请求设置默认的Http标头?

来自分类Dev

使用AngularJS发送HTTP标头请求

来自分类Dev

使用标头“ origin”验证HTTP请求

来自分类Dev

使用AngularJS发送HTTP标头请求

来自分类Dev

使用PUT方法未在Golang http客户端请求中设置Content-Length标头

来自分类Dev

Android-使用Volley显示自定义列表视图(发送带有HTTP请求的标头)

来自分类Dev

如何使用 Content-Type 标头创建响应?

来自分类Dev

为什么只有在设置了 Content-Type HTTP 标头时,对我的 Web API 的请求才会成功?

来自分类Dev

AngularJS如何在Http请求中包含标头

来自分类Dev

如何从Rocket中的请求检索HTTP标头?

来自分类Dev

ngx_lua如何删除http请求标头

来自分类Dev

如何在ruby的http请求中包含标头

来自分类Dev

我如何记录HTTP请求的主机标头(Spring Boot)

来自分类Dev

如何从Rocket中的请求检索HTTP标头?

来自分类Dev

如何通过curl查看HTTP请求标头?

来自分类Dev

如何在compojure请求中获取特定的HTTP标头

来自分类Dev

如何获取完整的 HTTP 请求(非响应)标头

来自分类Dev

使用urllib2发出带有标头的发布请求

Related 相关文章

  1. 1

    如何传递HTTP标头以从API发出请求?

  2. 2

    如何发送带有标头参数的HTTP请求?

  3. 3

    如何为带有wreq的请求设置HTTP标头?

  4. 4

    未使用Angular $ http设置Content-Type标头

  5. 5

    AngularJS $ http删除请求Content-Type标头

  6. 6

    如何使用Perl为HTTP请求发送不正确的Content-Length标头?

  7. 7

    如何使用请求发送带有标头的PATCH请求

  8. 8

    如何为Ionic 2中的所有请求设置默认的Http标头?

  9. 9

    如何发送带有自定义标头的HTTP删除请求?

  10. 10

    如何发送带有请求的HTTP / 2伪标头?

  11. 11

    Rails:如何获取带有标头的http请求?(产品搜索API)

  12. 12

    如何为Ionic 2中的所有请求设置默认的Http标头?

  13. 13

    使用AngularJS发送HTTP标头请求

  14. 14

    使用标头“ origin”验证HTTP请求

  15. 15

    使用AngularJS发送HTTP标头请求

  16. 16

    使用PUT方法未在Golang http客户端请求中设置Content-Length标头

  17. 17

    Android-使用Volley显示自定义列表视图(发送带有HTTP请求的标头)

  18. 18

    如何使用 Content-Type 标头创建响应?

  19. 19

    为什么只有在设置了 Content-Type HTTP 标头时,对我的 Web API 的请求才会成功?

  20. 20

    AngularJS如何在Http请求中包含标头

  21. 21

    如何从Rocket中的请求检索HTTP标头?

  22. 22

    ngx_lua如何删除http请求标头

  23. 23

    如何在ruby的http请求中包含标头

  24. 24

    我如何记录HTTP请求的主机标头(Spring Boot)

  25. 25

    如何从Rocket中的请求检索HTTP标头?

  26. 26

    如何通过curl查看HTTP请求标头?

  27. 27

    如何在compojure请求中获取特定的HTTP标头

  28. 28

    如何获取完整的 HTTP 请求(非响应)标头

  29. 29

    使用urllib2发出带有标头的发布请求

热门标签

归档