首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python请求在__VIEWSTATE之后得到__doPostBack和__EVENTVALIDATION

Python请求在__VIEWSTATE之后得到__doPostBack和__EVENTVALIDATION
EN

Stack Overflow用户
提问于 2021-09-13 23:21:28
回答 1查看 736关注 0票数 0

我正在向一个使用Asp.Net创建的网站提出请求。我使用Python会话获取__VIEWSTATE__EVENTVALIDATION变量,并将它们添加回数据有效负载。

代码语言:javascript
复制
response = s.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'lxml')
viewstate = soup.find(id='__VIEWSTATE').get('value')
eventvalidation = soup.find(id='__EVENTVALIDATION').get('value')
payload.update({'__VIEWSTATE': viewstate, '__EVENTVALIDATION': eventvalidation})
session.post(url, headers=headers, data=payload)

在我对具有onchange of javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$Chooser$Segment\',\'\')', 0)的表单执行操作之前,这段代码工作得很好。我必须在几个input上执行这个操作,这样就有了多个eventTarget

当我修改附加到__doPostBack()函数的任何表单元素时,我会收到以下消息:

无效回发或回调参数

来自Asp.Net。

如何模拟多个__doPostBack,以避免__VIEWSTATE__EVENTVALIDATION返回错误?

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 17:15:25

ASP.NET有隐藏的输入,当您提交响应时,需要将所有这些输入返回到ASP。

因此,当您丢弃web时,获取响应,并处理这些内容。

代码语言:javascript
复制
    def __get_hidden_input(self, content):
        """ Return the dict contain the hidden input 
        """
        tags = dict()
        soup =BeautifulSoup(content, 'html.parser')
        hidden_tags = soup.find_all('input', type='hidden')
        # print(*hidden_tags)
        for tag in hidden_tags:
            tags[tag.get('name')] = tag.get('value')
        
        return tags

然后,使用请求的其他表单数据单独更新这些dict数据。例如__EVENTTARGET,然后将其发送回服务器。

代码语言:javascript
复制
            r=sess.get(base_frm)
            attrs = self.__get_hidden_input(r.content)
            attrs.update({'__EVNETDATA':'your_target'})
            r=sess.post(base_frm, data=attrs)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69170069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档