Python 请求 POST 到带有验证 token 的网站

标签 python post token python-requests verification

我正在使用 Python 3.3 和 Requests 库来执行基本的 POST 请求。

我想模拟如果你从网页手动输入信息到浏览器会发生什么: https://www.dspayments.com/FAIRFAX .例如,在该 URL 中,输入“x”代表车牌,输入弗吉尼亚州。然后url变为:https://www.dspayments.com/FAIRFAX/Home/PayOption , 并显示所需的信息(我关心的是第二个网页的源代码)。

我查看了上面两个url的源代码。在第一个 url 的文本框中执行“检查元素”,我发现了一些需要包含在发布请求中的内容:{'Plate':"x", 'PlateStateProv':"VA", "submit":"Search "}.

然后第二个网站(以/PayOption 结尾)有原始 html:

<form action="/FAIRFAX/Home/PayOption" method="post"><input name="__RequestVerificationToken" type="hidden" value="6OBKbiFcSa6tCqU8k75uf00m_byjxANUbacPXgK2evexESNDz_1cwkUpVVePA2czBLYgKvdEK-Oqk4WuyREi9advmDAEkcC2JvfG2VaVBWkvF3O48k74RXqx7IzwWqSB5PzIJ83P7C5EpTE1CwuWM9MGR2mTVMWyFfpzLnDfFpM1" /><div class="validation-summary-valid" data-valmsg-summary="true">

然后,我使用上述 html 中的名称:值对作为发布请求的有效负载字典中的键和值。我认为问题是在第二个网址中,有一个“__RequestVerificationToken”,它似乎每次都有一个随机生成的值。

我怎样才能正确地发布到这个网站? “正确”的答案是在以“/PayOption”结尾的网站上生成相同的源代码,就好像您手动输入“x”作为车牌号,输入弗吉尼亚州作为州,然后在第一个 url 上单击提交。

我的代码是:

import requests

url1 = r'https://www.dspayments.com/FAIRFAX'
url2 = r'https://www.dspayments.com/FAIRFAX/Home/PayOption'

s = requests.Session()

#GET request  
r = s.get(url1)
text1 = r.text
startstr = '<input name="__RequestVerificationToken" type="hidden" value="'
start_ind = text1.find(startstr)+len(startstr)
end_ind = text1.find('"',start_ind)
auth_string = text1[start_ind:end_ind]


#POST request
payload = {'Plate':'x', 'PlateStateProv':'VA',"submit":"Search",
           "__RequestVerificationToken":auth_string,"validation-summary-valid":"true"}

post = s.post(url2, headers=user_agent, data=payload)
source_code = post.text

谢谢,-K。

最佳答案

您应该只需要第一页的数据,正如您所说,__RequestVerificationToken 随每个请求而变化。

您必须执行以下操作:

  • GET 请求 https://www.dspayments.com/FAIRFAX

  • 收获 __RequestVerificationToken 值(请求 session 将处理任何关联的 cookie)

  • POST 使用您从 GET 请求中抓取的数据

  • 从第二页提取你需要的任何内容

所以,只需专注于创建一个与第一页中的表单完全一样的表单。尝试一下,如果您仍在苦苦挣扎,我可以帮助您深入了解细节。

关于Python 请求 POST 到带有验证 token 的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27480893/

相关文章:

python - 检查 DynamoDB 表是否为空

python - 在 Python 中避免动态类型错误的策略是什么(NoneType 没有属性 x)?

python - Tensorflow LSTM 像素级分类

python - 使用 requests 库将 CURL 请求转换为 Python

jquery - Jquery Ajax POST 中出现 400 bad request 错误

python - Django CKEditor : ModuleNotFoundError when deploying to Heroku

JavaScript 函数在从 ASP.net 代码隐藏创建和调用时应该是未定义的

ruby-on-rails - 使用设计 token 身份验证的问题

javascript - 如何处理 axios 中的 401(身份验证错误)并使用react?

c++ - 为什么 bitand 没有正确解析以形成右值引用?