今天有個需求是要針對此網站模擬查詢資料:http://ladsweb.nascom.nasa.gov/data/search.html
以上是查詢前的內容。
這個畫面,是希望利用程式的方式取得查詢後的內容!
經由送出的條件,我們可以在 Firefox 、Chrome、IE 按 F12 查看網路傳輸資料。
在網路的頁籤,可以看到傳輸的資料,打開「POST search.html」
在「標頭頁」通常你要注意: 1、網址列,即按右鍵,複製網址。 2、「Cookie」,有些網站會檢查此使用者是否經合理的管道進行查詢 所以有時需要偽造 Cookie ,或是先用程式送出 GET、POST 抓取網站特定頁,將 Cookie 載回 Cookie jar,接下來的查詢,繼續使用 Cookie jar 的內容。
接下來,看 Post 頁,代表程式在上一個頁面時的表單「Form」實際對此 Search.html 頁送出了哪些內容!
接下來就可以開始撰寫模式查詢小程式: <?php include '../inc/conn.php'; include '../inc/include.php'; // 偷偷藏一些暗步,不告訴你們 XD
//網址 $URL="http://ladsweb.nascom.nasa.gov/data/search.html"; //POST的內容 $POST=ARRAY(); $POST['__PREV_form']='AADS'; $POST['form']='AADS'; $POST['orderState']=''; $POST['scrollX']='0'; $POST['scrollY']='1125'; $POST['title']='Search for Data Products'; $POST['si']='Terra MODIS'; $POST['group']='Terra Level 1 Products'; $POST['prodSelect']='0'; $POST['products']='MOD01'; $POST['temporal_type']='RANGE'; $POST['startTime']='01/01/2015 00:00:00'; $POST['endTime']='02/02/2015 23:59:59'; $POST['archiveSet']='6'; $POST['__PREV_coordinate_system']='LAT_LON'; $POST['coordinate_system']='LAT_LON'; $POST['__PREV_bboxType']='NWES'; $POST['bboxType']='NWES'; $POST['bb_top']='29'; $POST['bb_left']='109'; $POST['bb_right']='129'; $POST['bb_bottom']='9'; $POST['coverageOptions']='D'; $POST['PGEVersion']=''; $POST['filterPGEVersion']='No'; $POST['startQAPercentMissingData']='0.0'; $POST['endQAPercentMissingData']='100.0'; $POST['filterQAPercentMissingData']='No'; $POST['fileName']=''; $POST['Submit']='Search';
//初次先對 URL 送一次空的查詢,然後將 Cookie 存回自己指定的 Cookie jar $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $URL); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_COOKIEJAR, "/tmp/cookie.txt"); //保存cookie curl_setopt($curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); //讀取cookie curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //在暫存區進行 output ob_start(); curl_exec($curl); $data=ob_get_contents(); ob_end_clean();
//打開 Cookie jar,看看裡面裝什麼,因為已知有個 LAADS 好像很重要
//實際去看 /tmp/cookie.txt //內容如下
/* Cookie jar 的內容很多,所以先取我們要用的內容,也就是組成:
LAADS=ba852363981945a1b1214067f8b4f345 */
$c = file_get_contents("/tmp/cookie.txt"); $c = explode('LAADS',$c); $c = "LAADS=".trim($c[1]);
// 接下來就是真正的查詢了~ // 在 header 中包入 Cookie: LAADS=ba852363981945a1b1214067f8b4f345 // 而 POST 是放在 content 裡,可以利用 php 的 http_build_query 自動幫你組成 key1=value1&key2=value2&... $opts = stream_context_create(array ( 'http'=>array( 'method'=>"POST", 'header'=>"Content-type: application/x-www-form-urlencoded\r\n". "Cookie: {$c}", 'content'=>(is_array($POST))?http_build_query($POST):$POST ) ));
// 直接印出查詢後的結果 echo file_get_contents($URL,false,$opts);
於是很成功的得到了查詢的結果~~~
打完收工! |