php-cURLを使用してカスタムレポートを作成およびダウンロードする
cURLを使用して安全なサイトにログインし、財務データを含むカスタムレポートを作成して、自分のマシンにダウンロードしようとしています。リモートログインプロセスが機能していると判断しました。問題は、レポートの作成とダウンロードに使用しているPOSTパラメーターにあります。私はこれを約1週間機能させようとしてきましたが、運がありません。
基本的に、これはログイン(簡略化)で機能します:
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などが正しいです。私はそれらを4回チェックしました。問題はURLエンコーディングです(私は推測しています)。 urldecode()、urlencode()、htmlentities()、rawurlencode()、rawurldecode()を試しましたが、そのスコアで何をしているのかよくわかりません。このコードは、約4年前は正常に機能していました。今、私はそれを復活させようとしていますが、役に立たないのです。
問題のサイトのサポートチームに連絡を取りましたが、まだ連絡がありません。彼らが私を助けてくれるかどうかわからないので、私もここで試してみようと思いました。
何かアイデアはありますか?これは、このようなクエリを作成する正しい方法ですか?助けていただければ幸いです。よろしくお願いします。
答え :
解決策:
2番目の投稿データを送信するときにまだ接続していることを確認しますか? libcurlを使用したCookieセッションについて確認する必要があります;)
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。