使用Curl和Php下载附加到标题的文件

时间:2010-06-03 13:31:30

标签: php curl

我每天都在连接一个网站收集一些统计信息,网站运行.net以使事情变得更加困难。我想做的是使这个过程机械化。

我转到http://www.thesite.com:8080/statistics/Login.aspx?ReturnUrl=%2Fstatistics%2Fdataexport.ashx%3FReport%3D99,(返回的网址是/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 个答案:

答案 0 :(得分:1)

您还需要使用CURLOPT_COOKIEFILE将Cookie与下一个请求一起发送。如果我没记错的话,另一件事是ASPX每次都会为__VIEWSTATE这样的变量设置唯一值。看看这两个指针是否有帮助。