簡體   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