繁体   English   中英

Python:发送POST请求不起作用

[英]Python: Sending POST request doesn't work

我正在试图抓一个网页发送POST来填写表格,一般我用selenium用python抓一页,但我最近读到发送POST请求是一种更好的方法来刮取结果。 无论如何,我遵循了一些指令来制作我的代码,但是当我发布我的数据时,我得到填写表单的同一页面(POST不提交表单),我做错了什么? 同样的页面还有另一个表单填写第一个,所以如果我填写第一个表单我真的不知道如何保持响应以获得最终的响应,所以如果有人可以帮助一些想法,我会回想一下欣赏它! 谢谢,我包括我的代码和我正在寻找的页面刮取最终报价:

https://www.santander.cl/cotizador-web/

import requests, lxml.html
import time

s = requests.session()
login = s.get('https://www.santander.cl/cotizador-web/cotizador/pasosSolicitud.xhtml')
login_html = lxml.html.fromstring(login.text)
hidden_inputs = login_html.xpath(r'//form//input[@type="hidden"]')
form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs}

form['pasosForm:marcas']='27'
form['pasosForm:modelos']='1978'
form['pasosForm:ano']='2015'
form['pasosForm:uso']='1'
form['pasosForm:j_id93373712_1a32e354_input']='on'
form['formDialogCotiSelec:j_id216370348_64c01a10_active'] = '1'
form['javax.faces.partial.execute']='pasosForm pasosForm:siguiente1'

response = s.post('https://www.santander.cl/cotizador-web/cotizador/pasosSolicitud.xhtml', data=form)
print(response.text)

我看到所有形式都有这样的隐藏字段

    <input type="hidden" name="javax.faces.ViewState" 
id="javax.faces.ViewState" value="zDmSF7aJ4QSdyqjY5D4dGbfEaQr5OiS6WorNARY6pfHWSXIe/APb5e
/wcHsiGvPVaXW4IFpVHFyFHNSSJMPdHt2mhaYm4TQ9WPo+TQgWFTB1ZRE1wwiJtXQfmKuwE2+R+iRmONBAmZCR9E8x" />

它是csrf令牌并从当前会话生成。 在发出请求之前,您应该访问表单页面(创建会话)。

更多信息:

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM