Php Flurry认证&;通过cURL下载CSV

Php Flurry认证&;通过cURL下载CSV,php,curl,flurry,flurry-analytics,Php,Curl,Flurry,Flurry Analytics,我试图通过php&cURL验证并下载Flurry事件日志。《丝绸之火》帮了我一部分,但我仍然无法下载。我相信我已经通过了身份验证,但是下载似乎返回了一个错误页面,而不是文件。以下是我正在尝试的最新代码: $post = array( 'loginEmail' => 'email', 'loginPassword' => 'pw', //'rememberMeCheckbox' => 'true', //'__checkbox_remembe

我试图通过php&cURL验证并下载Flurry事件日志。《丝绸之火》帮了我一部分,但我仍然无法下载。我相信我已经通过了身份验证,但是下载似乎返回了一个错误页面,而不是文件。以下是我正在尝试的最新代码:

$post = array(
  'loginEmail'        => 'email',
  'loginPassword'     => 'pw',
  //'rememberMeCheckbox' => 'true',
  //'__checkbox_rememberMeCheckbox' => 'true',
  'struts.token.name' => 'token',
);

//$ckfile = tempnam("/tmp", "FLURRYCOOKIE");

$ch = curl_init('https://dev.flurry.com/secure/login.do');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_COOKIEFILE, null);
//curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

libxml_use_internal_errors(true);

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML(curl_exec($ch));

$xpath = new DOMXPath($dom);


$post['token'] = $xpath->query('//input[@name="token"]')->item(0)->getAttribute('value');


curl_setopt($ch, CURLOPT_URL, 'https://dev.flurry.com/secure/loginAction.do');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
//curl_setopt( $ch, CURLOPT_COOKIEFILE, $ckfile );
//curl_setopt($ch, CURLOPT_COOKIESESSION, true );
//curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);

$login = curl_exec($ch);

$log_url = 'https://dev.flurry.com/eventsLogCsv.do?projectID=12345&versionCut=versionsAll&intervalCut=30Days&childProjectId=0&stream=true&direction=1&offset=0';
$ch = curl_init();
//curl_setopt( $ch, CURLOPT_COOKIEFILE, $ckfile );
curl_setopt($ch, CURLOPT_URL, $log_url);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, "");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$data = curl_exec($ch);
//print_r($data);
$error = curl_error($ch);
curl_close ($ch);

$destination = "/tmp/flurry_event_log.csv";
$file = fopen($destination, "w");
fputs($file, $data);
fclose($file);
任何帮助都将不胜感激

更新:以下是$data响应的主要内容:

    <div id="main">
    <!-- center -->
    <div id="centerColumn">
      <h1>&nbsp;</h1>
      <div class="fontSize" style="margin:50px;">
            <h2>Oops, an unexpected error has occurred.</h2>
            <br/><br/><br/>
            Please <a class="colorMediumBlue bold hover fontSize" href="/">go home</a> and try again.
            <br/><br/><br/>
            If you receive this same message more than once,
            please email <a class="colorMediumBlue bold hover fontSize" href="mailto:support@flurry.com">support@flurry.com</a> with details on how you arrived on this error page.
        <br/><br/>
        We apologize for this inconvenience and we will find a solution to this issue as soon as possible.
        <br/><br/>
        Sincerely,<br/>
        The Flurry Team
      </div>
  </div>
</div>

哎呀,发生了意外错误。



请再试一次。


如果您多次收到此消息, 请通过电子邮件详细说明您是如何到达此错误页面的。

对于由此带来的不便,我们深表歉意,我们将尽快找到解决方案。

真诚地说,
Flurry团队
将此行代码添加到您的第一次通话中:

curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookieFileName");
然后在存储cookie数据后,在第二次调用curl时使用它:

curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookieFileName");
并确保存储了cookies,并且您在/tmp/cookieFileName路径或您想要的任何路径上没有任何权限问题

我编辑了你的代码

<?php

$post = array(
    'loginEmail' => 'mertizci@xxxxx.com',
    'loginPassword' => 'xxxxxxx',
    //'rememberMeCheckbox' => 'true',
    //'__checkbox_rememberMeCheckbox' => 'true',
    'struts.token.name' => 'token',
);
$ch = curl_init('https://dev.flurry.com/secure/login.do');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_COOKIEFILE, null);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

libxml_use_internal_errors(true);

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML(curl_exec($ch));

$xpath = new DOMXPath($dom);

$post['token'] = $xpath->query('//input[@name="token"]')->item(0)->getAttribute('value');

curl_setopt($ch, CURLOPT_URL, 'https://dev.flurry.com/secure/loginAction.do');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
curl_exec($ch);

$log_url = 'https://dev.flurry.com/eventsLogCsv.do?projectID=12345&versionCut=versionsAll&intervalCut=30Days&childProjectId=0&stream=true&direction=1&offset=0';
curl_setopt($ch, CURLOPT_URL, $log_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$data = curl_exec($ch);
//print_r($data);
$error = curl_error($ch);
curl_close($ch);
echo $data;
?>
loadHTML(curl_exec($ch));
$xpath=newdomxpath($dom);
$post['token']=$xpath->query('//input[@name=“token”]')->item(0)->getAttribute('value');
curl_setopt($ch,CURLOPT_URL,'https://dev.flurry.com/secure/loginAction.do');
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_POSTFIELDS,http_build_query($post));
curl_exec($ch);
$log\u url='1https://dev.flurry.com/eventsLogCsv.do?projectID=12345&versionCut=versionsAll&intervalCut=30Days&childProjectId=0&stream=true&direction=1&offset=0';
curl_setopt($ch,CURLOPT_URL,$log_URL);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
$data=curl\u exec($ch);
//打印(数据);
$error=curl\u error($ch);
卷曲关闭($ch);
回波数据;
?>

Mertizzi,感谢您的快速回复。我尝试了你的更改,但我仍然得到了一个用于数据的网页,而不是csv下载。我验证了cookie文件的权限(它们是完全开放的777),所以这不应该是一个问题。我将把回复页面的主要内容添加到我的原始帖子中。@joekrukosky你能用我的代码再试一次吗?我编辑了它。很好,就是这样。Mertizzi非常感谢您。@Mertizzi集成了上述代码段,但它生成了致命错误“致命错误:对非对象调用成员函数getAttribute()”