我在使用 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
}
答案 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)