代码之家  ›  专栏  ›  技术社区  ›  Eric Herlitz

使用curl和php下载附加到头部的文件

  •  2
  • Eric Herlitz  · 技术社区  · 14 年前

    我每天都会连接到一个网站来收集一些统计数据,这个网站运行.net让事情变得更加困难。我想做的是把这个过程机械化。

    我去 http://www.thesite.com:8080/statistics/Login.aspx?ReturnUrl=%2Fstatistics%2Fdataexport.ashx%3FReport%3D99 ,(返回的URL是/statistics/dataexport.ashx?报告=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);
    ?>
    

    谢谢 特里克斯

    1 回复  |  直到 14 年前
        1
  •  1
  •   Sabeen Malik    14 年前

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