«Проверка MAC состояния представления не удалась» для запроса POST с использованием запросов Python - PullRequest
1 голос
/ 02 июля 2019

Я отправляю запрос POST на последующие страницы в таблице aspx, используя python-запросы. Ответ: «b'306 | error | 500 | Ошибка проверки MAC-адреса состояния представления. Если это приложение размещено на веб-ферме или в кластере, убедитесь, что в конфигурации указан одинаковый ключ validationKey и алгоритм проверки. AutoGenerate нельзя использовать в кластере. \ R \ n \ r \ n См. http://go.microsoft.com/fwlink/?LinkID=314055 для получения дополнительной информации. | ' «

Я могу выполнить успешный POST-запрос для входа в систему и получения первой страницы результатов. Ссылка для каждой из следующих страниц представляет собой запрос JavaScript «__doPostBack». Я использую ту же логику для получения __VIEWSTATE, __EVENTVALIDATION и __VIEWSTATEGENERATOR для передачи с запросом POST, но получаю ошибку MAC.

2-я страница результатов должна быть возвращена, как если бы я нажал на следующую ссылку на странице:

"JavaScript: __ doPostBack ( 'ctl00 $ ContentPlaceHolder1 $ TabControl1 $ ViewRecords1 $ OrderStatus1 $ DataGrid1 $ CTL01 $ CTL01', '')"

import requests
from bs4 import BeautifulSoup

headers = { 'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0'}

with requests.Session() as s:
    url = "https://www.wavecontactlenses.com/waveioss/"
    r = s.get(url, headers=headers)
    soup = BeautifulSoup(r.content, 'html5lib')

    ##get view state value
    view_state = soup.find_all("input", {"id":"__VIEWSTATE"})[0]["value"]
    event_validation = soup.find_all("input", {"id":"__EVENTVALIDATION"})[0]["value"]
    view_state_generator = soup.find_all("input", {"id":"__VIEWSTATEGENERATOR"})[0]["value"]


    login_data = {
        '__EVENTTARGET' : '',
        '__EVENTARGUMENT' : '',
        '__VIEWSTATE' : view_state,
        '__VIEWSTATEGENERATOR' : view_state_generator,
        '__EVENTVALIDATION' : event_validation,
        'TextBoxUserId' : 'xxxxxxxx',
        'TextBoxPassword' : 'xxxxxx',
        'ButtonLogin' : 'login+to+WaveIOSS'
    }

    r = s.post(url, data=login_data, headers=headers)
    soup = BeautifulSoup(r.content, 'html5lib')
    #This request is successful and first page is displayed

    url = "https://www.wavecontactlenses.com/waveioss/main.aspx"

    ## get view state value
    view_state = soup.find_all("input", {"id":"__VIEWSTATE"})[0]["value"]
    event_validation = soup.find_all("input", {"id":"__EVENTVALIDATION"})[0]["value"]
    view_state_generator = soup.find_all("input", {"id":"__VIEWSTATEGENERATOR"})[0]["value"]

    target = 'ctl00$ContentPlaceHolder1$TabControl1$ViewRecords1$OrderStatus1$DataGrid1$ctl01$ctl02'

    login_data.clear()
    login_data = {
        'ct100$ScriptManager1' : 'ctl00$UpdatePanelPage|ctl00$ContentPlaceHolder1$TabControl1$ViewRecords1$OrderStatus1$DataGrid1$ctl01$ctl02',
        '__EVENTTARGET' : target,
        '__EVENTARGUMENT' : '',
        '__VIEWSTATE' : view_state ,
        '__VIEWSTATEGENERATOR' : view_state_generator,
        '__EVENTVALIDATION' : event_validation,
        '__ASYNCPOST' : 'true'
        'ct100@ContentPlaceHolder1$TabControl1$ViewRecords1$OrderStatus1$Status1' : 'LAB'
    }

    headers['Referer'] = r.request.url

##this request returns the MAC validation error
    r = s.post(url, data=login_data, headers=headers, cookies=r.cookies.get_dict())
    print(r.content)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...