Python当多个字段具有相同名称时,如何为POST数据选择字段

时间:2016-11-18 07:08:33

标签: python post python-requests

我在使用 requests python模块编写 POST 请求时遇到问题。 这个html标记有8个输入字段:

<input class="form-control col-md-9" name="submission[value]" id="submission_value" type="text">

每个人都有自己独特的div。例如:

<div id="problem_7">
        <input class="form-control col-md-9" name="submission[value]" id="submission_value" type="text">
</div>
<div id="problem_8">
        <input class="form-control col-md-9" name="submission[value]" id="submission_value" type="text">
</div>

由于有8个输入框,其属性名称为“submission [value]”,如何才能将数据专门发布到#problem_8中的数据?

DevTools将此信息(解码后)显示为POST数据中发送的内容:

UTF8 =✓&安培; _method =创建&安培; authenticity_token = 0S9z6WoYNSggXFo / 6HP99CZ67V4qn4 + QGy8 + l36BV24BlAxkCXDAedGHItuXpCDxs7sPtkA1jGUIgNaJMSaxMQ ==&安培;提交[ID] = 8&安培;提交[值] = 2222&安培;提交=提交

下面是我的POST数据有效负载当前的设置方式:

payload = {
            "submission[value]": x,
            "authenticity_token":authenticity_token
        }

2 个答案:

答案 0 :(得分:0)

您还需要发送submission[id]字段。您可以在POST数据中看到发送了以下键/值:

UTF8 =✓&安培; _method =创建&安培; authenticity_token = 0S9z6WoYNSggXFo / 6HP99CZ67V4qn4 + QGy8 + l36BV24BlAxkCXDAedGHItuXpCDxs7sPtkA1jGUIgNaJMSaxMQ ==&安培;提交[ID] = 8&安培;提交[值] = 2222&安培;提交=提交

  • utf8 =
  • _method = create
  • authenticity_token = <some long token value not relevant>
  • submission[id] = 8
  • submission[value] = 2222
  • commit = Submit

你应该尽可能地密切复制这个。查看源代码,似乎需要将submission[id]设置为所需问题的整数值。

答案 1 :(得分:0)

解决了它。 CSRF保护要求您通过POST有效负载和cookie发送真实性令牌。

session_requests = requests.session()
cookies = {
     "authenticity_token":authenticity_token,
     "csrf-token":csrf_token
    }
    result = session_requests.post(SUBMIT_URL, data=payload,cookies=cookies)