Advertisement
dannyAAMtw

retrive some page data?

Sep 5th, 2013
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.15 KB | None | 0 0
  1. <?php
  2. $website = 'http://www.cnyes.com/usastock/idxgroup.aspx?ind=0533';
  3.  
  4. $page = $_REQUEST['page'] || '1';
  5.  
  6. // 以下是分析無參數時的頁面
  7. // 取得驗證用的兩個重要資訊並且解析出資料部分的內容
  8. // innerHTML函式來自 : http://kuttler.eu/post/php-innerhtml/
  9. /*
  10. $c2 = curl_init();
  11. curl_setopt($c2, CURLOPT_URL, $website);
  12. curl_setopt($c2, CURLOPT_RETURNTRANSFER, 1);
  13. $DOM = new DOMDocument;
  14. $DOM->loadHTML(curl_exec($c2));
  15. curl_close($c2);
  16.  
  17. function innerHTML( $contentdiv ) {
  18.     $r = '';
  19.     $elements = $contentdiv->childNodes;
  20.     foreach( $elements as $element ) {
  21.         if ( $element->nodeType == XML_TEXT_NODE ) $r .= $element->nodeValue;
  22.         elseif ( $element->nodeType == XML_COMMENT_NODE ) $r .= '';
  23.         else {
  24.             $r .= '<';
  25.             $r .= $element->nodeName;
  26.             if ( $element->hasAttributes() ) {
  27.                 $attributes = $element->attributes;
  28.                 foreach ( $attributes as $attribute ) $r .= " {$attribute->nodeName}='{$attribute->nodeValue}'" ;
  29.             }
  30.             $r .= '>';
  31.             $r .= innerHTML( $element );
  32.             $r .= "</{$element->nodeName}>";
  33.         }
  34.     }
  35.     return $r;
  36. }
  37.  
  38. $items = $DOM->getElementsByTagName('input');
  39. for ($i = 0; $i < $items->length; $i++) {
  40.     $item = $items->item($i);
  41.     if ($item->getAttribute('name') == '__VIEWSTATE') echo $item->getAttribute('value') . "<br/>";
  42.     if ($item->getAttribute('name') == '__EVENTVALIDATION') echo $item->getAttribute('value') . "<br/>";
  43. }
  44. echo innerHTML($DOM->getElementById('UpdatePanel1')). '<br>';
  45. */
  46.  
  47.  
  48.  
  49.  
  50. $c2 = curl_init();
  51. curl_setopt($c2, CURLOPT_URL, $website);
  52. curl_setopt($c2, CURLOPT_RETURNTRANSFER, 1);
  53. curl_setopt($c2, CURLOPT_POST, 1);
  54. curl_setopt($c2, CURLOPT_HTTPHEADER, array('X-MicrosoftAjax: Delta=true', // to get delta
  55.                                            
  56.                                            // !!!important!!! 必須要是有效的瀏覽器 User Agent
  57.                                            'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0',
  58.                                            ));
  59. $post_dat = array(
  60.                   // !!!important!!! 這部分算是驗證吧
  61.                   /*
  62.                   __VIEWSTATE       => 這包含了目前瀏覽頁面的資訊 類似哪一頁啦 還有一堆不確定的資料
  63.                   __EVENTVALIDATION => 恩... 名稱很明顯的是驗證XD 這好像只跟上面那字串有關 估計是HASH之類的吧
  64.                   整體來說 這兩個值保持原樣應該就沒啥問題了吧XDD
  65.                   下面這組是第一頁時的資料
  66.                   */
  67.                   '__VIEWSTATE'             => '/wEPDwULLTIwNDE5MzI3NDcPFgYeB25vd3BhZ2UFATEeCXRvdGFscGFnZQIJHgNpbmQFBDA1MzMWAgIDD2QWBgIHDxYCHgRUZXh0BQ/mjqLli5jlkoznlJ/nlKJkAgkPFgIfAwUKMjAxMy0wOS0wNmQCCw9kFgJmD2QWAgIDD2QWBgIDDw8WAh4HVmlzaWJsZWhkZAIFDw8WAh8EaGRkAgcPEGQQFQkBMQEyATMBNAE1ATYBNwE4ATkVCQExATIBMwE0ATUBNgE3ATgBORQrAwlnZ2dnZ2dnZ2cWAWZkZNi3zKx/0M9XLLviIj62PCVrOkau',
  68.                   '__EVENTVALIDATION'       => '/wEWDQLPuN8UAsTM9IsOAsXM9IsOAsbM9IsOAsfM9IsOAsDM9IsOAsHM9IsOAsLM9IsOAtPM9IsOAtzM9IsOAubh4r8HAq3nmqkHAtb64vgHprfKSkcA7V+UyDifxMN0b5JTfV8=',
  69.                  
  70.                  
  71.                   //'PageSeprater1$DDLPage' => '2' // 指定頁
  72.                   //'PageSeprater1$LBPre'   => 'AnyValueXD' // '上一頁'
  73.                   //'PageSeprater1$LBnext'  => 'AnyValueXD' // '下一頁'
  74.                  
  75.                   'PageSeprater1$DDLPage'   => $page
  76.                   );
  77.  
  78. // 第一頁和第一頁基本上不會有啥資料差XD 所以用別頁的資料來造成差異www
  79. if ($page == '1') {
  80.     // 下面這組是第二頁時的資料
  81.     $post_dat['__VIEWSTATE'] = '/wEPDwULLTIwNDE5MzI3NDcPFgYeB25vd3BhZ2UFATIeCXRvdGFscGFnZQIJHgNpbmQFBDA1MzMWAgIDD2QWBgIHDxYCHgRUZXh0BQ/mjqLli5jlkoznlJ/nlKJkAgkPFgIfAwUKMjAxMy0wOS0wNmQCCw9kFgJmD2QWAgIDD2QWBgIDDw8WAh4HVmlzaWJsZWdkZAIFDw8WAh8EZ2RkAgcPEGQQFQkBMQEyATMBNAE1ATYBNwE4ATkVCQExATIBMwE0ATUBNgE3ATgBORQrAwlnZ2dnZ2dnZ2cWAQIBZGTwR97EG0/VJ6hHp5Nc4bVLtna9SA==';
  82.     $post_dat['__EVENTVALIDATION'] = '/wEWEAKj1eTZCgL39tPkBgKfze+9AgLLo97lAgLEzPSLDgLFzPSLDgLGzPSLDgLHzPSLDgLAzPSLDgLBzPSLDgLCzPSLDgLTzPSLDgLczPSLDgLm4eK/BwKt55qpBwLW+uL4B9UynTe2UkUNmJhb1c11IX27bmQI';
  83. }
  84.  
  85.  
  86. curl_setopt($c2, CURLOPT_POSTFIELDS, http_build_query($post_dat));
  87. $cont_str = curl_exec($c2);
  88. curl_close($c2);
  89.  
  90.  
  91. // 回傳值以 | 這個符號分界 其中第四個值為有差異的網頁內容(中間頁面的內容)
  92. $cont_ary = explode('|', $cont_str);
  93. echo $cont_ary[3];
  94. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement