Python社区  »  Python

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

Andy Huang • 2 周前 • 18 次点击  

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
 
18 次点击  
分享到微博