抓取asp.net页面时出现EVENTVALIDATION错误

时间:2012-06-14 09:41:48

标签: asp.net python beautifulsoup urllib2

我需要从website获取一些值。基本上我需要为每个城市获得区域。我正在使用Python和beautifulsoup。我在做的是:

  1. 首先向此页面发送获取请求并获取__VIEWSTATE和__EVENTVALIDATION以发出POST请求以获取特定州的城市。请点击此处查看其工作情况,我将为每个州提供城市。

    < / LI>
  2. 要获得区域,我需要使用新的__VIEWSTATE和__EVENTVALIDATION进行另一次POST,这次我需要发送city以及其他参数。但是我在这里收到错误:

  3. 505|error|500|Invalid postback or callback argument.  Event validation
    is enabled using <pages enableeventvalidation="true"> in configuration
    or <%@ Page EnableEventValidation="true" %> in a page.  For security
    purposes, this feature verifies that arguments to postback or callback
    events originate from the server control that originally rendered
    them.  If the data is valid and expected, use the
    ClientScriptManager.RegisterForEventValidation method in order to
    register the postback or callback data for validation.|</pages>
    

    我已经检查了firebug中我需要发送的每个参数/参数,以获取相应城市的区域但没有成功。也许根据我的问题是__VIEWSTATE或__EVENTVALIDATION。

    请帮帮我

2 个答案:

答案 0 :(得分:1)

你必须在一次会话调用中获取并传递__VIEWSTATE__EVENTVALIDATION变量,否则在重新打开与服务器的连接时进行第二次POST调用时,它希望再接收一个{{1 }和__VIEWSTATE

所以基本上逻辑应如下:

  • curl_init()
  • 卷曲GET __VIEWSTATE和__EVENTVALIDATION
  • * 这里的一些逻辑*
  • curl POST解析出__VIEWSTATE和__EVENTVALIDATION
  • *此处有些逻辑*
  • curl_close();

答案 1 :(得分:0)

尝试添加__REQUESTDIGEST表单字段,它是Sharepoint使用的验证字段。 另外,添加select元素的名称,其中states作为__EVENTTARGET field:

的值
__EVENTTARGET   ctl00$ctl25$g_4828177f_5427_4b0f_a968_ad02dc3674ec$ctl01$ddlState
__REQUESTDIGEST 0xDF6A6E14C550004C4A8533A9F5D...,14 Jun 2012 10:13:34 -0000