最近需要批量向織夢后台導入一些數據,但是遇到了一個頭疼的問題。
環境:xampp + 別人的dede后台。
首先,利用curl發送post請求登錄login.php,成功,並且保存了cookie文件。
第二步,post發送數據包到co_get_corule.php,失敗,得到登錄頁面的源碼。
於是,嘗試簡單的get請求,get獲取index.php,同上,依舊是cookie沒帶上的效果。
第三步,檢查cookie文件,確實存在,且內容也是正確的。
經過多次重復試驗,依舊失敗,於是發帖求助。
<?php header("Content-type: text/html; charset=utf-8"); !extension_loaded('curl') && die('The curl extension is not loaded.'); $cookie_jar = tempnam('./cookies','cookie');//存放COOKIE的文件 //登陸認證 $url = 'http://localhost/dede/login.php'; //本來封裝了函數,后來一直不成功,於是還原成了最原始的代碼積木 $post_data='gotopage=index.php&dopost=login&adminstyle=newdedecms&userid=admin&pwd=admin'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, 1); //設置post方式 curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); // 1相當於return,0相當於echo curl_setopt($ch,CURLOPT_COOKIESESSION,true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //設置需要post的數據 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); //保存cookie信息 curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳轉后的頁面,1是自動跳轉 //curl_setopt($ch, CURLOPT_NOBODY,1); //輸出的不包含body部分 $output1 = curl_exec($ch); //寫入結果到文件 file_put_contents('login.txt', $output1); curl_close($ch); //這里本來封裝了函數,后來一直不成功,於是還原成了最原始的代碼積木 $url2 = "http://localhost/dede/index.php"; $ch2 = curl_init(); curl_setopt($ch2, CURLOPT_URL, $url2); curl_setopt($ch2, CURLOPT_HEADER, 0); curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 ); // 1相當於return,0相當於echo curl_setopt($ch2, CURLOPT_BINARYTRANSFER, true); curl_setopt($ch2, CURLOPT_TIMEOUT, 30); //超時時間30s curl_setopt($ch2,CURLOPT_COOKIESESSION,true); curl_setopt($ch2, CURLOPT_HTTPGET, 1); // 發送一個常規的get請求 curl_setopt($ch2, CURLOPT_AUTOREFERER, 1); // 自動設置Referer curl_setopt($ch2,CURLOPT_COOKIEFILE,$cookie_jar);//發送cookie文件 curl_setopt($ch2, CURLOPT_COOKIEJAR, $cookie_jar); //保存cookie信息 curl_setopt($ch2, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳轉后的頁面,1是自動跳轉 //curl_setopt($ch, CURLOPT_NOBODY,1); //輸出的不包含body部分 $output = curl_exec($ch2); file_put_contents('index.txt', $output); curl_close($ch2); unlink($cookie_jar); ?>
以上是拆掉函數后的原始代碼,不具可讀性,只求能解決這個坎兒,期待大家的幫忙,謝謝!
【PS:實在不知道如何驗證cookie是否起作用了】