python - 使用 Python 请求向 ASP 提交表单的 MAC 验证错误
问题描述
通过 url fetch 服务从谷歌应用引擎发送 post 请求时,viewstate MAC 的验证失败
您好,我遇到了与这篇文章相同的问题,我正在将表单发布到 ASP.NET 托管网站,以替换 Selenium
- 我用 requests.Session()
- 使用 session.get() 提取视图状态、事件验证、视图状态生成器并附加到我的表单
- 我的get和post之间没有其他请求,viewstate保持不变
- cookie 和标头随着会话而略有变化
- 我可以通过 Chrome 发布表单,关闭 JavaScript
def get_asp_viewstate(page):
return {
'__EVENTTARGET': '',
'__EVENTARGUMENT': '',
'__LASTFOCUS': '',
"__VIEWSTATE":page.xpath('//*[@id="__VIEWSTATE"]//@value')[0],
"__VIEWSTATEGENERATOR": page.xpath('//*[@id="__VIEWSTATEGENERATOR"]//@value')[0],
"__EVENTVALIDATION": page.xpath('//*[@id="__EVENTVALIDATION"]//@value')[0],
'__VIEWSTATEENCRYPTED': '', #not encrypted
}
def login():
#login and return session object
s = requests.Session()
res = s.get(login_url)
r = s.post(login_url, data=login_data, headers=headers)
return s
#Had logged in
session = login()
res = session.get(URL, cookies=session.cookies.get_dict())
page = etree.HTML(res.text)
validation = get_asp_viewstate(page)
form_data = {} # some dict
form_data.update(validation)
response = session.post(URL, headers=headers, cookies=cookie3,
data=form_data, verify=False,allow_redirects=True)
我得到了 http 500 的 100% 尝试。
此页面列出了一些原因,我确定该应用程序不在多服务器环境中,因为机会是 100%,而不是偶尔。
我想我几乎没有想法了。欢迎任何帮助或建议。
解决方案
推荐阅读
- javascript - 旋转字体真棒图标
- android - ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 对某些 Android 10 设备没有影响
- swift - 为用户创建矩阵视图以通过 TextField (SwiftUI) 输入数字
- angular - 当我提交 forgotPassword-AWS cognito 时,所有自定义属性都丢失了
- python - 自定义标签类不显示文本 PqQt5
- android - 我可以将 Syncfusion SfTreeView 的大小设置为动态吗?
- xampp - 有没有一种快速的方法可以在 TYPO3 中启用安装工具?
- arrays - 创建一个未知字符串数组 - 未定义的行为
- django - Django注释NumericRange - AttributeError:'NumericRange'对象没有属性'resolve_expression'
- python - 如何在理解列表 Python 中写这个