2010-06-03 8 views
2

일부 통계를 수집하기 위해 매일 웹 사이트에 연결하고 있습니다. 웹 사이트는 .net을 실행하여 작업을 더욱 어렵게 만듭니다. 내가하고 싶은 것은이 과정을 기계화하는 것입니다.Curl 및 Php로 헤더에 첨부 된 파일 다운로드

나는 http://www.thesite.com:8080/statistics/Login.aspx?ReturnUrl=%2Fstatistics%2Fdataexport.ashx%3FReport%3D99으로 가고 (반환 URL은 /statistics/dataexport.ashx?Report=99 디코딩 됨). Login.aspx는 사용자/패스를 입력하는 양식을 표시하고 양식이 제출되면 dataexport.ashx가 파일을 직접 다운로드하기 시작합니다. 전달 된 파일 이름은 항상 statistics.csv입니다.

저는 며칠 동안 이것을 실험했습니다. 자원이 있습니까? 아니면 다음에 시도해야 할 것에 대한 힌트가 있습니다.

다음은 제 코드입니다.

<?php 
// INIT CURL 
$ch = curl_init(); 

// SET URL FOR THE POST FORM LOGIN 
curl_setopt($ch, CURLOPT_URL, $url); 

// ENABLE HTTP POST 
curl_setopt ($ch, CURLOPT_POST, 1); 

// SET POST PARAMETERS : FORM VALUES FOR EACH FIELD 
$viewstate = urlencode('/wEPDwUKM123123daE2MGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFGG1fTG9naW4kTG9naW5JbWFnZUJ1dHASdasdRvbij2MVoasdasdYibEXm/eSdad4hS'); 
$eventval = urlencode('/wEWBAKMasd123LKJJKfdAvD8gd8KAoCt878OED00uk0pShTQHkXmZszVXtBJtVc='); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, "__VIEWSTATE=$viewstate"."__EVENTVALIDATION=$eventval&UserName=myuser&Password=mypassword"); 

// IMITATE CLASSIC BROWSER'S BEHAVIOUR : HANDLE COOKIES 
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); 

# Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL 
# not to print out the results of its query. 
# Instead, it will return the results as a string return value 
# from curl_exec() instead of the usual true/false. 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 

// FOLLOW REDIRECTS AND READ THE HEADER 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_HEADER, true); 

// EXECUTE REQUEST (FORM LOGIN) 
$store = curl_exec ($ch); 

// print the result 
print_r($store); 

// CLOSE CURL 
curl_close ($ch); 
?> 

덕분에 Trikks

답변

1

또한 다음 요청과 함께 쿠키를 보낼 CURLOPT_COOKIEFILE를 사용해야합니다. 또 다른 것은 내가 정확히 기억한다면 ASPX는 __VIEWSTATE와 같은 변수에 대해 매번 고유 한 값을 설정할 것이라는 것입니다. 이 2 개의 포인터가 도움이되는지보십시오.

+0

감사합니다. 나는 그것에 대해 살펴볼 것입니다! –

+0

올바른 포인터가되는 것에 대한 정답으로 추가됨 –

관련 문제