SHOW:
|
|
- or go back to the newest paste.
| 1 | <?php | |
| 2 | $website = 'http://www.cnyes.com/usastock/idxgroup.aspx?ind=0533'; | |
| 3 | ||
| 4 | - | $page = $_REQUEST['page'] || '1'; |
| 4 | + | $page = $_REQUEST['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 |
| 56 | + | // !!!important!!! 必須要是有效的瀏覽器 User Agent |
| 57 | - | 'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0', |
| 57 | + | 'User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0', |
| 58 | - | )); |
| 58 | + | )); |
| 59 | $post_dat = array( | |
| 60 | - | // !!!important!!! 這部分算是驗證吧 |
| 60 | + | // !!!important!!! 這部分算是驗證吧 |
| 61 | /* | |
| 62 | __VIEWSTATE => 這包含了目前瀏覽頁面的資訊 類似哪一頁啦 還有一堆不確定的資料 | |
| 63 | __EVENTVALIDATION => 恩... 名稱很明顯的是驗證XD 這好像只跟上面那字串有關 估計是HASH之類的吧 | |
| 64 | 整體來說 這兩個值保持原樣應該就沒啥問題了吧XDD | |
| 65 | 下面這組是第一頁時的資料 | |
| 66 | */ | |
| 67 | - | '__VIEWSTATE' => '/wEPDwULLTIwNDE5MzI3NDcPFgYeB25vd3BhZ2UFATEeCXRvdGFscGFnZQIJHgNpbmQFBDA1MzMWAgIDD2QWBgIHDxYCHgRUZXh0BQ/mjqLli5jlkoznlJ/nlKJkAgkPFgIfAwUKMjAxMy0wOS0wNmQCCw9kFgJmD2QWAgIDD2QWBgIDDw8WAh4HVmlzaWJsZWhkZAIFDw8WAh8EaGRkAgcPEGQQFQkBMQEyATMBNAE1ATYBNwE4ATkVCQExATIBMwE0ATUBNgE3ATgBORQrAwlnZ2dnZ2dnZ2cWAWZkZNi3zKx/0M9XLLviIj62PCVrOkau', |
| 67 | + | '__VIEWSTATE' => '/wEPDwULLTIwNDE5MzI3NDcPFgYeB25vd3BhZ2UFATEeCXRvdGFscGFnZQIJHgNpbmQFBDA1MzMWAgIDD2QWBgIHDxYCHgRUZXh0BQ/mjqLli5jlkoznlJ/nlKJkAgkPFgIfAwUKMjAxMy0wOS0wNmQCCw9kFgJmD2QWAgIDD2QWBgIDDw8WAh4HVmlzaWJsZWhkZAIFDw8WAh8EaGRkAgcPEGQQFQkBMQEyATMBNAE1ATYBNwE4ATkVCQExATIBMwE0ATUBNgE3ATgBORQrAwlnZ2dnZ2dnZ2cWAWZkZNi3zKx/0M9XLLviIj62PCVrOkau', |
| 68 | - | '__EVENTVALIDATION' => '/wEWDQLPuN8UAsTM9IsOAsXM9IsOAsbM9IsOAsfM9IsOAsDM9IsOAsHM9IsOAsLM9IsOAtPM9IsOAtzM9IsOAubh4r8HAq3nmqkHAtb64vgHprfKSkcA7V+UyDifxMN0b5JTfV8=', |
| 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 | ?> |