【问题标题】:Make a POST request using ab (apache benchmarking) on a django server在 django 服务器上使用 ab(apache 基准测试)发出 POST 请求
【发布时间】:2015-04-19 14:15:09
【问题描述】:

我正在尝试使用 ab 向使用 django 构建的表单发出 HTTP POST 请求。

我正在使用以下行:

ab -n 10 -C csrftoken=my_token -p ab_file.data -T application/x-www-form-urlencoded http://localhost:8000/

我的ab_file.data 看起来像这样:

url=my_encoded_url&csrfmiddlewaretoken=my_token

它总是返回一个403 状态码。

当我使用 curl 并使用相同的参数时,它可以工作。卷曲线:

curl -X POST -d "url=my_encoded_url&csrfmiddlewaretoken=my_token" --cookie "csrftoken=my_token" http://localhost:8000/

我该怎么做?

【问题讨论】:

    标签: django post apachebench


    【解决方案1】:

    文件必须具有正确的 url 编码数据。如果您手动进行 url-encode,则很容易出现诸如空格错误编码之类的拼写错误。最好以编程方式进行。 查看另一个答案:Apache Bench and POST data 关于如何使用 Python 创建这样的文件(例如:post.data)

    然后使用: ab -T 'application/x-www-form-urlencoded' -n 10 -p post.data http://localhost:8080/

    【讨论】:

    • 你好,是否可以像 curl 一样在命令中指定发布数据而不是文件?
    【解决方案2】:

    使用 ab 时,必须将数据文件的全部内容包装到一行 - 如果它通常是 JSON 扩展,它会静默失败。因此,在您执行此操作之前,可以使用 curl 正常工作的数据文件中的帖子将因 ab 而失败。

    提示:如果使用 Atom 或 VSCode,请全选并按 Cmd-J 将所有内容打包到一行。

    【讨论】:

      【解决方案3】:

      @jacobm654321,

      当然,最好的办法是以编程方式对 URL 进行编码。但我的问题不在于。我的问题是包含帖子数据的文件在文件末尾有一个空行。 EditorConfig 把它放在那里。删除该空白行后,一切正常。

      还是谢谢。

      【讨论】:

      • 对于vim用户,vi postFile,:set binary noeol,:wq去掉行尾('\n');
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 2010-09-09
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多