112010
 

有时候蛋疼一下,用PHP自动抓取一些东西。不过碰到ASP.Net这玩意儿顿时傻眼了,翻页等等都是用控件实现的。

1

还好以前学了点皮毛,知道用ViewState这神奇的玩意儿,知道这个就足够了,打开FireFox,以及HttpWatch,点一下“下一页”请求一下:

2

其他的没啥用,最重要的是最三面的三个参数。分别是viewstate,方法,参数。

很好办了。curl请求一下。就能获取到刷新后的页面了。

所以。。。HttpWatch真是神器,同样的FireBug、Fiddler也是!

Tips:viewstate的值可以用phpquery或者simple html dom 轻松获取,当然,如果蛋疼一下,用正则去获取也是可以的。

  2 Responses to “PHP 伪造ASP.Net 的控件请求”

  1. 達達你好

    看了你的post, 知道了可以用HttpWatch抓到Viewstate的值,
    不過curl的用法還是有點不太了解… 是否可以請教你一下…?
    以下是我寫的code, 以Kingston的網站來做example,

    ‘dnn$ctr45923$View$ctl00$lnkDeviceMemorySpec’,
    ‘__EVENTARGUMENT’ => ”,
    ‘__VIEWSTATE’ => ‘F1KXD0EKO5V4CsxZuljIHITo2Z8964hLTKhsA1X3e4………(太長了刪掉)’
    );
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_PROXY,””);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    $data = curl_exec($ch);

    if($data === false)
    {
    echo ‘Curl error #’.curl_errno($ch).': ‘ . curl_error($ch);
    }

    curl_close($ch);
    return $data;
    }

    $returned_content = get_data(‘http://www.kingston.com/tw/memory/search?DeviceType=2&Mfr=ACE&Line=AspireRevo&Model=56884′);
    ?>

    回傳的結果是 Curl error #7: couldn’t connect to host
    就算隨便弄個沒有viewstate的網站, 用curl回傳的也是一樣,
    請問這跟我在localhost測試有關嗎? 是否有辦法可以解決?

    不好意思麻煩你了, 感謝你…

  2. sorry,

    前面不小心斷掉了

    function get_data($url)
    {
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT,$timeout);
    curl_setopt($ch, CURLOPT_USERAGENT,’Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13′);
    $data = array(
    ‘__EVENTTARGET’ => ‘dnn$ctr45923$View$ctl00$lnkDeviceMemorySpec’,
    ‘__EVENTARGUMENT’ => ‘ ‘,

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>