2012-10-09 41 views
0

我試圖訪問我使用curl註冊的網站的帳戶,問題是登錄頁面有隱藏的驗證輸入字段,例如<input type='hidden' name='auth' value='adih2yerjh'/>,有沒有辦法確保我提交表單之前使用curl檢查該字段的該字段?這裏是一個模擬了我的功能curl在提交之前獲取頁面內容

function login(){ 
    $login_email = 'email'; 
    $login_pass = 'password'; 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, 'http://www.mysite.com/login.php'); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,'email='.urlencode($login_email).'&pass='.urlencode($login_pass).'&login=Login'); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt"); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3"); 
    $page = curl_exec($ch); 
    echo $page; 
} 

編輯:在每個頁面加載

回答

1

您可以嘗試

$url = "http://www.mysite.com/login.php"; 
$html = file_get_contents($url); 
preg_match("~<input type='hidden' name='auth' value='(.*?)' />~",$html,$authHidden); 

/** 
// Run your post request with auth=$authHidden 
*/ 
+0

這是行不通的,因爲身份驗證代碼變化對以往頁遊,我將不得不爲此在1去 –

+0

哦,等等,我看到你的推理,我確定如果我沒有提交表格認證碼仍然有效 –

+0

@ mk_89你沒有提交...該會議仍應該是積極的..事實上,工作在你提供的有限信息..沒有談到改變代碼 – Baba

1

你得把兩個捲曲請求中的驗證代碼的變化。
首先獲取頁面內容並嘗試從HTML中提取該名稱。您可能還需要處理會話或cookie。
然後您可以提交第二個curl請求。