2014-04-27 97 views
0

我想用捲曲填充表單,但此表單是在登錄後出現的面板頁面中的iframe中加載的。 我已經卷入了curl並獲取了面板頁面的內容,但是無法設置java篩選iframe以顯示post.aspx。 當我嘗試直接加載post.aspx我得到重定向。 在瀏覽器中,當我離開面板頁面打開並在新選項卡中打開post.aspx時,沒有任何直接操作可以免除。 我認爲這是方式。但是,當我發送一個curl到login.aspx並沒有關閉它之前捲曲post.aspx我怎麼能用curl來做到這一點? 我很抱歉英文寫作不好。打開secound捲曲像在新標籤中(firt一個保持打開狀態)

回答

0

由於它是一個ASP.net應用程序,很可能它會在您的登錄名中設置多個cookie,例如asp.net會話ID。您需要從初始登錄請求中獲取cookie值,並在每個新請求上發送這些值以保持登錄狀態。您還需要查看是否帖子頁面需要通過你提到的,在你捲曲的請求手動提供他們的JavaScript設置任何參數。

但是,它可能會更容易不使用捲曲爲此,轉而使用網絡驅動程序來運行瀏覽器做如phantomjs或腳本WebKit的實例爲你的請求。

0

我發現如何做到這一點,但出現了另一個問題。 這是可以打開post.aspx頁面,並保持面板頁面(Default.aspx的)開放的方式,這裏是我的代碼:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1"); 
curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/$rand.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/$rand.txt'); 
curl_setopt($ch, CURLOPT_URL, "http://blogfa.com/Desktop/Login.aspx"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=".$viewstate."&__EVENTVALIDATION=".$eventvalidation."&master%24ContentPlaceHolder1%24Uid=".$user."&master%24ContentPlaceHolder1%24Password=".$pass."&master%24ContentPlaceHolder1%24btnSubmit=%D9%88%D8%B1%D9%88%D8%AF+%D8%A8%D9%87+%D8%A8%D8%AE%D8%B4+%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA"); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // allow redirects 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable 
$Cpanel = curl_exec($ch);; 
preg_match_all('#<a href\="Post\.aspx\?t\=(.*?)" target#', $Cpanel, $seasonid); 

$res = curl_exec($ch); 
curl_setopt($ch, CURLOPT_URL, "http://blogfa.com/Desktop/Post.aspx?t=".$seasonid[1][0]); 
curl_setopt($ch, CURLOPT_POST, 0); 
$res = curl_exec($ch); 

preg_match_all('#id="__VIEWSTATE" value="(.*?)" />#', $res, $poststate)) 
$postviewstate = urlencode($poststate[1][0]); 
preg_match_all('#id="__EVENTVALIDATION" value="(.*?)" />#', $res, $postvalidation); 
$posteventvalidation = urlencode($postvalidation[1][0]); 
preg_match_all('#<input name="txtDay" type="text" value="(.*?)" maxlength="2" id="txtDay" title#', $res, $day); 
preg_match_all('#<input name="txtMonth" type="text" value="(.*?)" maxlength="2" id="txtMonth"#', $res, $Month); 
preg_match_all('#<input name="txtYear" type="text" value="(.*?)" maxlength="4" id="txtYear"#', $res, $Year); 
preg_match_all('#<input name="txtMinute" type="text" value="(.*?)" maxlength="2" id="txtMinute"#', $res, $Minute); 
preg_match_all('#<input name="txtHour" type="text" value="(.*?)" maxlength="2" id="txtHour"#', $res, $Hour); 
// send post 
$res = curl_exec($ch);   
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1"); 
curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/$rand.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/$rand.txt'); 
curl_setopt($ch, CURLOPT_URL, "http://blogfa.com/Desktop/Post.aspx?t=".$seasonid[1][0]); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "__VIEWSTATE=".$postviewstate."&__EVENTVALIDATION=".$posteventvalidation."&hasextended=false&txtTitle=".$posttitle."&txtContent=".$postcontent."%3Cbr+%2F%3E%3Cp%3E%0D%0A%0D%0A%3C%2Fp%3E&txtExtended=&btnPublish=%D8%AB%D8%A8%D8%AA+%D9%85%D8%B7%D9%84%D8%A8+%D9%88+%D8%A8%D8%A7%D8%B2%D8%B3%D8%A7%D8%B2%DB%8C+%D9%88%D8%A8%D9%84%D8%A7%DA%AF&txtTags=".$posttags."&cmbCommentType=9&txtDay=".$day[1][0]."&txtMonth=".$Month[1][0]."&txtYear=".$Year[1][0]."&txtMinute=".$Minute[1][0]."&txtHour=".$Hour[1][0]."&chkAutomateTime=on&txtPostPW="); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // allow redirects 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable 
$posted = curl_exec($ch); 

這裏是一個新的問題: 是post.aspx負載每次,它有一個新的驗證和狀態。 所以在我的代碼我第一次開post.aspx,並得到驗證和狀態和日期值,然後做一個標題,並張貼,我覺得當我嘗試後,其在新post.aspx,有一個新的驗證和狀態,大錯特錯。 當我呼應$貼出我得到一個錯誤頁,上面寫着形式是不完整.. 任何幫助,請....

內容