Php 使用cURL创建和下载自定义报告

Php 使用cURL创建和下载自定义报告,php,curl,character-encoding,query-string,libcurl,Php,Curl,Character Encoding,Query String,Libcurl,我正在尝试使用cURL登录到一个安全的站点,创建一个包含财务数据的自定义报表,并将其下载到我的机器上。我已确定远程登录过程正在运行。问题在于我用来创建和下载报告的POST参数。我已经试着让它工作了大约一个星期了,但我没有运气 基本上,这适用于登录(简化): 但下载自定义报告的相同过程不起作用: curl_setopt($ch, CURLOPT_URL, 'https://manager.myurl.com/customReport.do'); curl_setopt($ch, CURLOPT_P

我正在尝试使用cURL登录到一个安全的站点,创建一个包含财务数据的自定义报表,并将其下载到我的机器上。我已确定远程登录过程正在运行。问题在于我用来创建和下载报告的POST参数。我已经试着让它工作了大约一个星期了,但我没有运气

基本上,这适用于登录(简化):

但下载自定义报告的相同过程不起作用:

curl_setopt($ch, CURLOPT_URL, 'https://manager.myurl.com/customReport.do');
curl_setopt($ch, CURLOPT_POSTFIELDS, $downloadpost);
$downloadpost变量(多维数组)的创建方式如下:

$today = Date('d');
$month = Date('m');
$year = Date('Y');
$pmonth = $month - 3;
$pyear = $year;

if ($pmonth < 1) {
   $pmonth = 12 + $pmonth;
   $pyear = $year - 1;
}

$downloadpost=http_build_query(
    array(
        'newTemplateName' => '',
        'dateRange' => 'Custom',
        'fromMonth' => $pmonth,
        'fromDate' => $today,
        'fromYear' => $pyear,
        'fromHour' => '00',
        'fromMinute' => '00',
        'fromSecond' => '00',
        'toMonth' => $month,
        'toDate' => $today,
        'toYear' => $year,
        'toHour' => '23',
        'toMinute' => '59',
        'toSecond' => '59',
        'timezone' => 'U.S. Eastern',
        'cardTypes' => 'C-5,C-4,C-2,C-1,C-0',
        'transactionTypes' => 'S,D,O,A,F,C,V',
        'userName' => 'MyUserName', 
        'minAmount' => '0.00',
        'maxAmount' => '10000.00',
        'resultOption' => 'Approvals Only',
        'displayColumns' => array(
            'Transaction ID',
            'ABA Routing Number',
            'AVS Streeth Match',
            'AVS Zip Match',
            'Account Number',
            'Amount',
            'Authcode',
            'Batch ID',
            'Billing Address',
            'Billing City',
            'Billing Company Name',
            'Billing Country',
            'Billing Email',
            'Billing First Name',
            'Billing Last Name',
            'Billing State',
            'Billing Zip',
            'CSC Match',
            'Comment1',
            'Comment2',
            'Customer Code',
            'Duty Amount',
            'Expires',
            'Freight Amount',
            'Invoice Number',
            'Original Transaction ID',
            'PayPal Email ID',
            'PayPal Fees',
            'Purchase Order',
            'Response Msg',
            'Result Code',
            'Shipping Address',
            'Shipping City',
            'Shipping Email',
            'Shipping First Name',
            'Shipping Last Name',
            'Shipping State',
            'Shipping Zip',
            'Tax Amount',
            'Tender Type',
            'Time',
            'Type'
        ),
        'sortBy' => 'Transaction ID',
        'sortOrder' => 'Ascending',
        'transMode' => 'Live',
        'Download' => '1',
        'downloadMode' => 'asciiHeaders',
        'subaction' => 'download',
        'oldTemplateName' => '',
        'reportName' => 'CustomReport',
        'reportType' => 'CustomReport',
    )
);
我们的想法是创建一个具有所示选项的报告,然后将其下载到我的服务器上的文本文件(.tsv)中。唯一下载到我的文本文件的是一个失败页面(由于潜在的安全问题,我们已将您注销…请单击此处再次登录)

那是我的问题。所以,我的问题是,我如何才能以一种有效的方式创建查询,或者重写这个查询

所有变量、选项、字段名、URL等都是正确的。我已经检查了四次了。问题是url编码(我猜)。我试过urldecode()、urldecode()、htmlentities()、rawurldecode()、rawurldecode(),但我真的不知道我在这方面做了什么。这段代码在大约4年前还可以正常工作。现在我正试图让它复活,但没有用

我已经联系了相关站点的支持团队,但我还没有得到回复。我不知道他们是否能帮助我,所以我想我也应该在这里试试


有什么想法吗?这是构建这样的查询的正确方法吗?我将感谢任何帮助。提前感谢。

发送第二条post数据时,您确定仍保持连接吗?您应该使用libcurl;)了解cookies会话

看起来这是perl代码?最好添加一个
perl
标记。在任何情况下,你有没有尝试过让“hello world”查询在该站点上运行?如果没有URL和登录凭据,我们无论如何都不会尝试复制您的问题,因此拥有60行代码无助于其他人调试您的问题。把它弄小。祝你好运。不,实际上是php,不是perl。是的,我尝试过在没有数组的情况下创建一个非常简单的查询,但是没有成功。无论如何,我只是认为我在构建查询的方式上可能犯了一些明显的错误,但有人告诉我,有问题的网站宁愿我使用他们的xml api来完成这项任务,所以我可能不得不放弃这一切。至少将您的一个标记更改为
php
,然后,您将有数千名观看php问题的用户查看您的问题。(请注意,
查询字符串
只有19个跟随者)。祝你好运
$today = Date('d');
$month = Date('m');
$year = Date('Y');
$pmonth = $month - 3;
$pyear = $year;

if ($pmonth < 1) {
   $pmonth = 12 + $pmonth;
   $pyear = $year - 1;
}

$downloadpost=http_build_query(
    array(
        'newTemplateName' => '',
        'dateRange' => 'Custom',
        'fromMonth' => $pmonth,
        'fromDate' => $today,
        'fromYear' => $pyear,
        'fromHour' => '00',
        'fromMinute' => '00',
        'fromSecond' => '00',
        'toMonth' => $month,
        'toDate' => $today,
        'toYear' => $year,
        'toHour' => '23',
        'toMinute' => '59',
        'toSecond' => '59',
        'timezone' => 'U.S. Eastern',
        'cardTypes' => 'C-5,C-4,C-2,C-1,C-0',
        'transactionTypes' => 'S,D,O,A,F,C,V',
        'userName' => 'MyUserName', 
        'minAmount' => '0.00',
        'maxAmount' => '10000.00',
        'resultOption' => 'Approvals Only',
        'displayColumns' => array(
            'Transaction ID',
            'ABA Routing Number',
            'AVS Streeth Match',
            'AVS Zip Match',
            'Account Number',
            'Amount',
            'Authcode',
            'Batch ID',
            'Billing Address',
            'Billing City',
            'Billing Company Name',
            'Billing Country',
            'Billing Email',
            'Billing First Name',
            'Billing Last Name',
            'Billing State',
            'Billing Zip',
            'CSC Match',
            'Comment1',
            'Comment2',
            'Customer Code',
            'Duty Amount',
            'Expires',
            'Freight Amount',
            'Invoice Number',
            'Original Transaction ID',
            'PayPal Email ID',
            'PayPal Fees',
            'Purchase Order',
            'Response Msg',
            'Result Code',
            'Shipping Address',
            'Shipping City',
            'Shipping Email',
            'Shipping First Name',
            'Shipping Last Name',
            'Shipping State',
            'Shipping Zip',
            'Tax Amount',
            'Tender Type',
            'Time',
            'Type'
        ),
        'sortBy' => 'Transaction ID',
        'sortOrder' => 'Ascending',
        'transMode' => 'Live',
        'Download' => '1',
        'downloadMode' => 'asciiHeaders',
        'subaction' => 'download',
        'oldTemplateName' => '',
        'reportName' => 'CustomReport',
        'reportType' => 'CustomReport',
    )
);
newTemplateName=&dateRange=Custom&fromMonth=2&fromDate=10&fromYear=2015&fromHour=00&fromMinute=00&fromSecond=00&toMonth=05&toDate=10&toYear=2015&toHour=23&toMinute=59&toSecond=59&timezone=U.S.+Eastern&cardTypes=C-5%2CC-4%2CC-2%2CC-1%2CC-0&transactionTypes=S%2CD%2CO%2CA%2CF%2CC%2CV&userName=MyUserName&minAmount=0.00&maxAmount=10000.00&resultOption=Approvals+Only&displayColumns%5B0%5D=Transaction+ID&displayColumns%5B1%5D=ABA+Routing+Number&displayColumns%5B2%5D=AVS+Streeth+Match&displayColumns%5B3%5D=AVS+Zip+Match&displayColumns%5B4%5D=Account+Number&displayColumns%5B5%5D=Amount&displayColumns%5B6%5D=Authcode&displayColumns%5B7%5D=Batch+ID&displayColumns%5B8%5D=Billing+Address&displayColumns%5B9%5D=Billing+City&displayColumns%5B10%5D=Billing+Company+Name&displayColumns%5B11%5D=Billing+Country&displayColumns%5B12%5D=Billing+Email&displayColumns%5B13%5D=Billing+First+Name&displayColumns%5B14%5D=Billing+Last+Name&displayColumns%5B15%5D=Billing+State&displayColumns%5B16%5D=Billing+Zip&displayColumns%5B17%5D=CSC+Match&displayColumns%5B18%5D=Comment1&displayColumns%5B19%5D=Comment2&displayColumns%5B20%5D=Customer+Code&displayColumns%5B21%5D=Duty+Amount&displayColumns%5B22%5D=Expires&displayColumns%5B23%5D=Freight+Amount&displayColumns%5B24%5D=Invoice+Number&displayColumns%5B25%5D=Original+Transaction+ID&displayColumns%5B26%5D=PayPal+Email+ID&displayColumns%5B27%5D=PayPal+Fees&displayColumns%5B28%5D=Purchase+Order&displayColumns%5B29%5D=Response+Msg&displayColumns%5B30%5D=Result+Code&displayColumns%5B31%5D=Shipping+Address&displayColumns%5B32%5D=Shipping+City&displayColumns%5B33%5D=Shipping+Email&displayColumns%5B34%5D=Shipping+First+Name&displayColumns%5B35%5D=Shipping+Last+Name&displayColumns%5B36%5D=Shipping+State&displayColumns%5B37%5D=Shipping+Zip&displayColumns%5B38%5D=Tax+Amount&displayColumns%5B39%5D=Tender+Type&displayColumns%5B40%5D=Time&displayColumns%5B41%5D=Type&sortBy=Transaction+ID&sortOrder=Ascending&transMode=Live&Download=1&downloadMode=asciiHeaders&subaction=download&oldTemplateName=&reportName=CustomReport&reportType=CustomReport