0

cURL で php スクリプトを使用して外部 Web ページにログインしようとしています。私は cURL を初めて使用するので、多くの部分が欠けているように感じます。いくつかの例を見つけて、https ページへのアクセスを許可するように変更しました。最終的に、私の目標は、ページにログインし、ログイン後に指定されたリンクをたどって .csv をダウンロードできるようにすることです。これまでのところ、ページへのログインをテストするスクリプトがあります。スクリプトを以下に示します。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.websiteurl.com/login');
curl_setopt($ch, CURLOPT_POSTFIELDS,'Email='.urlencode($login_email).'&Password='.urlencode($login_pass).'&submit=1');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
curl_setopt($ch, CURLOPT_REFERER, "https://www.websiteurl.com/login");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$output = curl_exec($ch);

いくつかの質問を聞きたいんです。まず、これが自動的にリダイレクトされない理由はありますか? ページのコンテンツを表示する唯一の方法は、

echo $output

CURLOPT_RETURNTRANSFER と CURLOPT_FOLLOWLOCATION の両方が True に設定されていても。

次に、ページの URL は実際の Web サイトに誘導するのではなく、「localhost/folderName/test.php」のままです。なぜこれが起こるのか誰か説明できますか?スクリプトは実際にはログインしている Web ページにリダイレクトしないため、必要なことを何もできないようです。

私の問題は Cookie と関係がありますか? 私の cookies.txt ファイルは、.php スクリプトと同じフォルダーにあります。(ところでwampServerを使用しています)。他の場所に配置する必要がありますか?

これら 2 つの問題を修正できたら、.csv ファイルのダウンロード プロセスを開始するリンクにリダイレクトするだけでよいようです。

助けてくれてありがとう、どうもありがとう!

4

1 に答える 1

2

あなたの質問の一部に答える:

http://php.net/manual/en/function.curl-setopt.phpから:

CURLOPT_RETURNTRANSFER TRUE を指定すると、直接出力するのではなく、curl_exec() の戻り値の文字列として転送が返されます。

言い換えれば、あなたが説明したことを正確に実行します。応答を文字列に返しているechoので、それを見ることができます。リクエスト通り...

- - - 編集 - - -

質問の 2 番目の部分については、スクリプトの最後の 3 行を次のように変更すると、

$output = curl_exec($ch);
header('Location:'.$website);
echo $output;

表示されるページのアドレスは次のように変わります- 私の場合、これはあなたの「 https://www.websiteurl.com/login$websiteに相当するものを保存するために使用する変数です

それがあなたのやりたいことかどうかわかりません。あなたの次のステップが何なのか、私にはよくわからないからです。ログイン サイトからリダイレクトされた場合、新しいアドレスは返されるヘッダーの一部ではありませんか? wgetそして、取得したいファイルをダウンロードするために次のリクエスト (またはその他のもの) を実行するために、そのアドレスを抽出する必要はありませんか?

そのためには、CURLOPT_HEADER を TRUE に設定する必要があります。

たどり着いたURLを取得できます

$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 

( cURL を参照して、変数へのリダイレクト URL を取得してください)。

同じリンクには、ヘッダー情報を完全に解析するための便利なスクリプトもあります (次の場合に返されCURLOPT_HEADER==trueます。nico limpica による回答にあります。

結論: CURL は、特定のサイトを指定した場合にブラウザーが受け取る情報を取得します。それは、ブラウザがそのサイトを指したかのように動作するという意味ではありません...

于 2013-02-18T02:22:22.113 に答える