基本的に、私はWebサイトにログインし、ファイルをダウンロードするスクリプトを持っています。かなり簡単です。残念ながら、コードに何かが欠けていて、正しく機能していません。
実行すると、ファイルに出力されたhtmlページが返されます。これは、ログオンせずにファイルリンクにアクセスしようとした場合に、ブラウザーに表示されるものとまったく同じです。アクセスが拒否されました。ログインする必要があります。
ただし、ファイルのダウンロード要求をコメントアウトしてスクリプトの最初の部分を単独で実行してから、スクリプト全体を再実行すると、ファイルを適切にダウンロードできるので、ファイルがで機能していることがわかります。検出。スクリプト全体を実行すると、ログインしたくないようです。
// Log me in
curl_setopt($handle, CURLOPT_URL, $login_url);
curl_setopt($handle, CURLOPT_REFERER, $admin_url);
curl_setopt($handle, CURLOPT_COOKIEJAR, $Cookie_Location);
curl_setopt($handle, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($handle, CURLOPT_TIMEOUT, 60);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
// Grab the file
curl_setopt($handle, CURLOPT_URL, $csv_loc);
curl_setopt($handle, CURLOPT_FILE, $csv_handle);
echo $response = curl_exec($handle);
curl_close($handle);
そのため、ログインしてからスクリプトを再実行してファイルをダウンロードすることはできますが、両方を同時に実行することはできません。COOKIEJARやCOOKIEFILE、FOLLOWLOCATIONやREFERERなど、さまざまな種類の追加のカールオプションを試しました。これらは、コードが機能しなかった理由についての唯一の勘でした。「ファイルを取得」コードの何かが、ログインを中断しているか、ログインしていないように動作しています。
編集:解決済み。
他の人が私がしたのと同じ間違いを避けるように、私は解決策を含めることにしました。
私がする必要があるのは、そのように私の要求を分離することだけでした。
// Log me in
curl_setopt($handle, CURLOPT_URL, $login_url);
curl_setopt($handle, CURLOPT_REFERER, $admin_url);
curl_setopt($handle, CURLOPT_COOKIEJAR, $Cookie_Location);
curl_setopt($handle, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($handle, CURLOPT_TIMEOUT, 60);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($handle, CURLOPT_POST, true);
curl_setopt($handle, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
echo $response = curl_exec($handle);
// Grab the file
curl_setopt($handle, CURLOPT_URL, $csv_loc);
curl_setopt($handle, CURLOPT_FILE, $csv_handle);
curl_exec($handle);
curl_close($handle);
最初にcurl_execがサイトにログインし、2番目のcurl_execがファイルを取得してダウンロードします。次に、ハンドルを閉じます。