2012-06-01 2 views
2

curl을 사용하여 안전한 aspx 사이트에 로그인하여 계정 데이터 일부를 검색하려고합니다.
페이지는 브라우저의 상태를 추적하기 위해 aspx __VIEWSTATE를 사용합니다. Submissions.aspxPHP 컬링을 사용하는 .aspx 페이지를 가져 오는 데 문제가 있습니다.

> 서버 (302) 사용자 응답 GETS -

사용자 Login.aspx (__VIEWSTATE 포함) login.aspx하는
사용자 포스트 __VIEWSTATE, LOGINNAME 및 loginPassword에서 GETS 여기 요청 헤더를 검사에서 시퀀스이고

submissions.aspx는 __EVENTTARGET = dgrdSubmissions $ ctl0x $ ctl00에 의해 참조되는 다른 클라이언트의 테이블입니다. 여기서 첫 번째 $ ctl0x는 클라이언트의 행을 나타냅니다.

사용자 게시물 _ viewstate가, _EVENTTARGET 및 submissions.aspx하는 AdvisorView의 PARAM - 의심이 사이트 나누기에서 -> 서버 (302) 사용자 응답은 (크롬 Policy.aspx

이 브라우저에서 잘 작동를 가져옵니다 파이어 폭스 메시지 : 'System.Web.HttpUnhandledException'예외가 발생했습니다 예외) 내 PHP 스크립트 GET Policy.aspx 로그인 페이지 및 예상 된 클라이언트 정보를 응답합니다. I로까지

function curl_page($url){ 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
$data=curl_exec($ch); 
curl_close($ch); 
return $data; 
} 

function curl_ssl_page($url="",$postdata=""){ 
$ch = curl_init(); 
$cookie = 'cookie.txt'; 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 

return $result; 
} 

function curl_get_page($url=""){ 

$ch = curl_init(); 
$cookie = 'cookie.txt'; 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); 
curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 

$result = curl_exec ($ch); 
return $result; 
} 

페이지

Pages - Login: 

if(isset($_POST['user-name'])) { 
    //GET login page 
    $url = "http://www.gryphinonline.ca/Login.aspx"; 
    $login_page = $this->curl_page($url); 

    // get viewstate 
    $regexViewstate = '/__VIEWSTATE\" value=\"(.*)\"/i'; 
    $regexEventVal = '/__EVENTVALIDATION\" value=\"(.*)\"/i'; 

$viewstate = $this->regexExtract($login_page,$regexViewstate,1); 
$eventval = $this->regexExtract($login_page, $regexEventVal,1); 

//Post to login page 
$postdata = '__VIEWSTATE='.rawurlencode($viewstate) 
    .'&txtLoginName='.$_POST['user-name'] 
    .'&txtPassword='.$_POST['password'] 
    .'&Start=Login+%2F+Ouverture+de+session'; 

$this->curl_ssl_page($url,$postdata); 
header("Location:http://url-edited/submissions"); 
} 

Pages - Submissions: 
    $url = "http://www.gryphinonline.ca/Submissions.aspx"; 
$submissions = $this->curl_get_page($url); 

$dom = new DOMDocument(); 
@$dom->loadHTML($submissions); 

// scrape for data including viewstate 
$view = $dom->getElementById('dgrdSubmissions'); 
if(!$view) header("Location://url-edited/login"); 

    $h_data = $dom->getElementsByTagName('div'); 
$h_data = $h_data->item(0); 

if(isset($_POST['__EVENTTARGET'])){ 
    $postdata=array(); 
    foreach ($_POST as $key => $value) { 
     $postdata[]=$key.'='.$value; 
    } 
    $postdata = implode('&', $postdata); 

    $this->curl_ssl_page($url,$postdata); 
    header("Location:http://url-edited/policy");   
} 

Pages - Policy: 
    $url = "http://www.gryphinonline.ca/Policy.aspx"; 
$policy = $this->curl_get_page($url); 

모든 HTTP 요청 및 쿠키가 동일한 :
도우미 기능 : 여기

은 (표시 마이너스 오류 검사 페이지) 내 코드입니다 말할 수있다. 누구가 여기에서 무슨 일이 일어나고 있는지 알 수 있습니까? 이것은 아마도 Firefox의 사이트 문제와 관련이 있습니까? 아니면 기본적인 것을 오해하고 있습니까?

나는 며칠 동안이 일을 해왔으며 어떤 도움을 주시면 감사하겠습니다.

답변

1

밖으로 나옵니다. POST 문자열을 제출하기 위해 urlencode하는 것을 잊어 버렸습니다.

관련 문제