你的读取程序少读了一个关键的东西。在.net中,服务器端控件都要在浏览器端放置一个供识别的唯一的编号。犹如sessionid一般。通过此编号来建立客户端与服务器端的联系

解决方案 »

  1.   

    有没有可能是通过隐藏表单来传递值的?
    不懂.net的机制,帮你顶!
      

  2.   

    to: xuzuning(唠叨)大哥
     我知道他那里面是用一个.net自带的控件分页处理的,其分页处的内容为<a href="javascript:__doPostBack('dgrdResultados1$_ctl54$_ctl1','')">2</a>&nbsp;<a href="javascript:__doPostBack('dgrdResultados1$_ctl54$_ctl2','')">3</a>&nbsp;<a href="javascript:__doPostBack('dgrdResultados1$_ctl54$_ctl3','')">4</a>&nbsp;<a href="javascript:__doPostBack('dgrdResultados1$_ctl54$_ctl4','')">5</a>&nbsp;<a href="javascript:__doPostBack('dgrdResultados1$_ctl54$_ctl5','')">6</a>
    老大,帮我看看啊,怎么处理,在线等,急
      

  3.   

    __doPostBack 里面写的语句是什么?不了解.net的机制 应该可以看到这个函数的吧!它里面一定有POST或者GET数据到服务器吧?
      

  4.   

    form1中有个隐藏的input是__EVENTTARGET
    它的值javascript中经split("$").join(":")之后post到服务端
    值dgrdResultados1$_ctl54$_ctl1的时候是第一页
    值dgrdResultados1$_ctl54$_ctl2的时候是第二页
    类推
    看源码中的这个:
    function __doPostBack(eventTarget, eventArgument) {
    var theform;
    if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
    theform = document.Form1;
    }
    else {
    theform = document.forms["Form1"];
    }
    theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
    theform.__EVENTARGUMENT.value = eventArgument;
    theform.submit();
    }
      

  5.   

    helloyou0(你好!)你说的这个我知道,关键是现在怎么样跳到第二页,大家倒说说啊,提个思路也行啊
      

  6.   

    无非是 POST 或 GET 页面参数,
    当然了,可能需要其他特殊验证信息。
    但理论上是可以抓到包分析的。
    模拟一次就可以。
      

  7.   

    to : lostgdi731(O_O)
    怎么模拟?指点一下
      

  8.   

    呵呵,如helloyou0说的:
    值dgrdResultados1$_ctl54$_ctl1的时候是第一页
    值dgrdResultados1$_ctl54$_ctl2的时候是第二页看一下_doPostBack函数的处理,挺简单的,只要POST的数据处理对了就能取到下一页了
    反正浏览器能做的,程序也都能做,HTTP无非是GET和POST数据而已
      

  9.   

    Visual Sniffer
    用他去抓包 呵呵
    其他的不好多说
    .net不熟悉
      

  10.   

    //改过的源码,但还是不行啊,因为php里面远程取数据都是用url获取的,而他的URL都一样,虽然程序能帮翻页,但是还是取的重复的数据啊,大大们再看一下
    <?php
    set_time_limit(0);
    $url = "http://www.fotocasa.es/busq/resultados.aspx?idTipoInmueble=2&idTipoOferta=2&idProvincia=27&idZona1=0&idZona2=0&idBarrio=0&idOtrasZonas=0&IdPoblacion=0&idDistrito=-2&Precio=0&Superficie=0&nHabitaciones=0&idTipoVivienda=0&x=50&y=9";
    $file = file_get_contents($url);//取__VIEWSTATE
    if(preg_match_all("|__VIEWSTATE\'?\"?\s+value\s*=\s*\"?\"(.+?)\"|is",$file,$viewStates))
    {
    $viewState = $viewStates[1][0];
    }//取得总页数
    $page = 1;
    if(preg_match_all("|javascript:__doPostBack\(\'dgrdResultados1$_ctl54$_ctl(.+?)\',\'\'\)\"|is",$file,$pages))
    {
    echo "go 2222   ";
    print_r($pages[1]);
    }
    for($page=0;$page<7;$page++)
    {
    if($page != 0)
    {
    $file = file_get_contents($url);//取得的结果还是一样啊?怎么让其变得不一样?
    }
    if(preg_match_all("|<tr\s+onClick\s*=\s*\"?\'?\s*submitar\(\s*\'?([0-9]+)\'?\s*[^)]+\)[^>]+>(.*?)</tr>|is",$file,$matches))
    {

    for($i=0;$i<count($matches[2]);$i++)
    {
    //echo $matches[2][$i];

    if(preg_match_all("|<td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td>|is",$matches[2][$i],$match1))
    {
    for($j=0;$j<count($match1[1]);$j++)
    {
    $location = $match1[2][$j];
    $type = $match1[3][$j];
    $roomNum = $match1[4][$j];
    $area = $match1[5][$j];
    $plant = $match1[6][$j];
    $price = $match1[7][$j];
    $state = $match1[8][$j];
    //写入数据库 
    echo $location;
    echo "&nbsp;&nbsp;";
    echo $type;
    echo "&nbsp;&nbsp;";
    echo $roomNum;
    echo "&nbsp;&nbsp;";
    echo $area ;
    echo "&nbsp;&nbsp;";
    echo $plant;
    echo "&nbsp;&nbsp;";
    echo $price;
    echo "&nbsp;&nbsp;";
    echo $state;
    echo "<br><br>";

    }

    }
    }
    }
    //自动提交到下一个页面? 怎么样取下一页的数据呢?
    ?>

    <form name="Form1" action="<?=$url?>" method="post">
    <input type="hidden" name="__EVENTTARGET" value="" >
    <input type="hidden" name="__EVENTARGUMENT" value="">
    <input type="hidden" name="__VIEWSTATE" value="<?=$viewState?>">
    </form>
    <script language="javascript" type="text/javascript">
    <!--

    eventTarget = "dgrdResultados1$_ctl54$_ctl"+"<?=$page?>";
    var theform;
    if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
    theform = document.Form1;
    }
    else {
    theform = document.forms["Form1"];
    }

    theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
    theform.__EVENTARGUMENT.value = eventArgument;
    theform.submit();

    // -->
    </script>
    <?php
    }
    ?>
      

  11.   

    看手册上的这个例子,是发post请求的,
    应该依葫芦画瓢就可以
    http://www.php.net/manual/en/ref.stream.php
      

  12.   

    helloyou0(你好!) ,看到我上面的网站$url = "http://www.fotocasa.es/busq/resultados.aspx?idTipoInmueble=2&idTipoOferta=2&idProvincia=27&idZona1=0&idZona2=0&idBarrio=0&idOtrasZonas=0&IdPoblacion=0&idDistrito=-2&Precio=0&Superficie=0&nHabitaciones=0&idTipoVivienda=0&x=50&y=9";
    我要是用fsockopen 的话,网址就只能为 $url = "www.fotocasa.es" 那我就得同时get/和post数据过去,用fsockopen 的话,不好处理吧
      

  13.   

    这是按fsockopen修改的程序,为什么运行时会提示找不到对像,当将post改成get时,运行结果就是显示第一页的结果//程序如下
    <?php
    set_time_limit(0);
    $url = "http://www.fotocasa.es/busq/resultados.aspx?idTipoInmueble=2&idTipoOferta=2&idProvincia=27&idZona1=0&idZona2=0&idBarrio=0&idOtrasZonas=0&IdPoblacion=0&idDistrito=-2&Precio=0&Superficie=0&nHabitaciones=0&idTipoVivienda=0&x=50&y=9";
    $file = file_get_contents($url);//取__VIEWSTATE
    if(preg_match_all("|__VIEWSTATE\'?\"?\s+value\s*=\s*\"?\"(.+?)\"|is",$file,$viewStates))
    {
    $viewState = $viewStates[1][0];
    }//取得总页数
    if(preg_match_all("|dgrdResultados1[$]_ctl54[$]_ctl([0-9]+)|is",$file,$pages))
    {
    $count = count($pages[1]);
    $count--;
    $totalPage = $pages[1][$count];
    }
    $url = "www.fotocasa.es";
    $fp = fsockopen($url,80,&$errno,&$errstr,300000);
    if(!$fp)
    {
    echo $errno.$errstr;
    die();
    }
    else
    {
    //第一页数据是用get 取得的 上面的file_get_content所取得的
    for($page=1;$page<$totalPage;$page++)
    {
    if($page > 0)
    {
    //取__EVENTTARGET 和__EVENTARGUMENT
    $tmp = "dgrdResultados1$_ctl54$_ctl2";
    $eventTarget = str_replace("$",":",$tmp);
    $eventArgument = "";

    //参数附加
    $file = "";
    $params = "__EVENTTARGET=".$eventTarget."&__EVENTARGUMENT=".$eventArgument."&__VIEWSTATE=".$viewState;
    $length = strlen($params);
    $header = "POST /busq/resultados.aspx?idTipoInmueble=2&idTipoOferta=2&idProvincia=27&idZona1=0&idZona2=0&idBarrio=0&idOtrasZonas=0&IdPoblacion=0&idDistrito=-2&Precio=0&Superficie=0&nHabitaciones=0&idTipoVivienda=0&x=50&y=9 HTTP/1.1\r\n";
    $header .= "Host:$url\r\n";
    $header .= "Content-Length:$length\r\n";
    $header .= "Content-type: application/x-www-form-urlencoded\r\n";
    $header .= "Connection:Close\r\n\r\n";
    $header .= $params."\r\n";
    fputs($fp,$header);
    while(!feof($fp))
    {
    $file. = fgets($fp, 4096);
    }
    }
    //写数据库
    if(preg_match_all("|<tr\s+onClick\s*=\s*\"?\'?\s*submitar\(\s*\'?([0-9]+)\'?\s*[^)]+\)[^>]+>(.*?)</tr>|is",$file,$matches))
    {

    for($i=0;$i<count($matches[2]);$i++)
    {
    //echo $matches[2][$i];

    if(preg_match_all("|<td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td><td\s+[^>]*>(.*?)</td>|is",$matches[2][$i],$match1))
    {
    for($j=0;$j<count($match1[1]);$j++)
    {
    $location = $match1[2][$j];
    $type = $match1[3][$j];
    $roomNum = $match1[4][$j];
    $area = $match1[5][$j];
    $plant = $match1[6][$j];
    $price = $match1[7][$j];
    $state = $match1[8][$j];
    //写入数据库 
    echo $location;
    echo "&nbsp;&nbsp;";
    echo $type;
    echo "&nbsp;&nbsp;";
    echo $roomNum;
    echo "&nbsp;&nbsp;";
    echo $area ;
    echo "&nbsp;&nbsp;";
    echo $plant;
    echo "&nbsp;&nbsp;";
    echo $price;
    echo "&nbsp;&nbsp;";
    echo $state;
    echo "<br><br>";

    }

    }
    }
    }
    }
    }
    ?>