【问题标题】:Using cURL to create and download custom reports使用 cURL 创建和下载自定义报告
【发布时间】:2015-05-10 15:43:53
【问题描述】:

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

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

curl_setopt($ch, CURLOPT_URL, 'https://manager.myurl.com/login.do');
curl_setopt($ch, CURLOPT_POSTFIELDS, 'partnerName='.$partner.'&vendorName='.$username.'&password='.$password);

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

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',
    )
);

这是 $downloadpost 的输出:

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

我们的想法是使用显示的选项创建一个报告,然后将其下载到我服务器上的文本文件 (.tsv) 中。唯一下载到我的文本文件的是一个失败页面(由于潜在的安全问题,我们已将您注销...请单击此处再次登录)。

这是我的问题。所以,我的问题是如何以一种可行的方式创建查询,或者重写这个?

所有变量、选项、字段名、url 等都是正确的。我已经对它们进行了四次检查。问题是 url 编码(我猜)。我试过 urldecode()、urlencode()、htmlentities()、rawurlencode()、rawurldecode(),但我真的不知道我在做什么。这段代码大约在 4 年前可以正常工作。现在我正在尝试恢复它,但无济于事。

我已经联系了相关站点的支持团队,但尚未收到回复。我不知道他们是否能帮助我,所以我想我也可以在这里尝试。

有什么想法吗?这是构建这样的查询的正确方法吗?我将不胜感激。提前致谢。

【问题讨论】:

  • 看起来这是 perl 代码?最好添加perl 标签。无论如何,您是否尝试过让“hello world”查询针对该站点工作?如果没有 URL 和登录凭据,我们无论如何都不会尝试复制您的问题,因此拥有 60 行代码并不能帮助其他人调试您的问题。让它变小。祝你好运。
  • 不,实际上是 php,而不是 perl。是的,我尝试创建一个没有数组的非常简单的查询,但没有运气。无论如何,我只是想也许我在构建查询的方式上犯了一些明显的错误,但有人告诉我,有问题的网站宁愿我使用他们的 xml api 来完成这项任务,所以我可能只需要报废这整件事。
  • 至少将您的标签之一更改为php,然后您将有成千上万的观看php问题的用户查看您的问题。 (请注意,query-string 只有 19 个关注者)。祝你好运。

标签: php curl character-encoding query-string libcurl


【解决方案1】:

您确定在发送第二个帖子数据时仍处于连接状态吗?你应该看看 libcurl 的 cookie 会话;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多