2017-02-04 4 views
0

私のPHPコードからこのasp.net pageにログインしようとしています(ユーザ名フィールド値を設定し、パスワードフィールド値を設定してボタンを押してから、私はusernameフィールドを設定することができますが、何らかの理由でパスワードフィールドを設定できません(HTMLファイルの226行目を参照)。asp.net urlを使用してパスワードフィールドの投稿データを設定する

<?php 
$url = "https://www.lectio.dk/lectio/518/login.aspx"; 
$ckfile = tempnam("/tmp", "CURLCOOKIE"); 
$useragent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2'; 

$username = "XXXXXXX"; 
$password = "XXXXXXX"; 


$f = fopen('log.txt', 'w'); // file to write request header for debug purpose 

/** 
    Get __VIEWSTATE & __EVENTVALIDATION 
*/ 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 

$html = curl_exec($ch); 

curl_close($ch); 

preg_match('~<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />~', $html, $viewstate); 
preg_match('~<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)" />~', $html, $eventValidation); 

$viewstate = $viewstate[1]; 
$eventValidation = $eventValidation[1]; 

/** 
Start Login process 
*/ 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_REFERER, $url); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_STDERR, $f); 
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 

// Collecting all POST fields 
$postfields = array(); 
$postfields['__EVENTTARGET'] = "m_Content_submitbtn2"; 
$postfields['__EVENTARGUMENT'] = ""; 
$postfields['__VIEWSTATE'] = $viewstate; 
$postfields['__EVENTVALIDATION'] = $eventValidation; 
$postfields['m$Content$username2'] = $username; 
$postfields['m$Content$password2'] = $password; 

curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields); 
$ret = curl_exec($ch); // Get result after login page. 
$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 
print $last_url; 
?> 

答えて

1

パスワードは、POSTフィールドm$Content$passwordHiddenで送信されているようです。変更してみてください$postfields['m$Content$password2'] = $password;から$postfields['m$Content$passwordHidden'] = $password;

編集: 変更できるものが見つかりました。お返事のための

preg_match('~<input type="hidden" name="__VIEWSTATEX" id="__VIEWSTATEX" value="(.*?)" />~', $html, $viewstate); 
... 
$postfields['__EVENTTARGET'] = "m$Content$submitbtn2"; 
... 
$postfields['__VIEWSTATEX'] = $viewstate; 
+0

ありがとう:私は、ログイン要求を送信すると、私はそう代わり__VIEWSTATEm$Content$submitbtn2__VIEWSTATEX__EVENTTARGETセットを持っています。残念ながら、それは同じです。何も起こりません。 – Martin

+0

これはどういう意味ですか?その場合はhttp://codebins.com/bin/4ldqoqsが動作しません。 – Martin

+0

@Martinはい、まだ動作していませんか? –

関連する問題