社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

使用Python请求向ASP提交表单时出现MAC验证错误

Andy Huang • 5 年前 • 263 次点击  

got Validation of viewstate MAC failed when sending post request from google app engine via url fetch service

您好,我遇到了与本文相同的问题,我正在向一个ASP.NET托管的网站发布一个表单,以替换Selenium

  1. 我使用了requests.Session()
  2. 使用session.get()提取viewstate、eventvalidation、viewstategenerator并附加到我的表单
  3. 我的get和post之间没有其他请求,viewstate rremain保持不变
  4. cookies和header在会话中略有更改
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)

我100%尝试得到了http 500。

https://support.microsoft.com/en-us/help/2915218/resolving-view-state-message-authentication-code-mac-errors

此页列出了一些原因,我确信应用程序不在多服务器环境中,因为机会是100%,不是偶尔。

我想我快没主意了。 欢迎任何帮助或建议。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56727
 
263 次点击