11

Web サイトからページをキャプチャできる php スクリプトを作成したいと思います。file_get_contents($url)と考えてください。

ただし、この Web サイトでは、ページにアクセスする前に、ユーザー名とパスワードのログイン フォームに入力する必要があります。ログインすると、Web サイトはブラウザーに認証 Cookie を送信し、その後のすべてのブラウザー要求で、アクセスを認証するためにセッション情報が Web サイトに返されると思います。

このWebサイトからページにアクセスしてキャプチャするために、phpスクリプトを使用してブラウザのこの動作をシミュレートする方法を知りたいです。

より具体的には、私の質問は次のとおりです。

  1. Web サイトがセッション情報/Cookie で応答するように、ログインの詳細を含むリクエストを送信するにはどうすればよいですか
  2. セッション情報/Cookie の読み取り方法
  3. 結果として生じるすべての要求 ( file_get_contentscurl )でこのセッション情報を Web サイトに戻すにはどうすればよいですか。

ありがとう。

4

2 に答える 2

19

カールはそれを行うのに非常に適しています。CURLOPT_COOKIEJARおよびCURLOPT_COOKIEFILEオプションを設定する以外に特別なことをする必要はありません。サイトからフォームフィールドを渡してログインすると、Cookieが保存され、以下の例に示すように、Curlは後続のリクエストに同じCookieを自動的に使用します。

以下の関数はCookieを保存するcookies/cookie.txtため、ディレクトリ/ファイルが存在し、書き込み可能であることを確認することに注意してください。

$loginUrl = 'http://example.com/login'; //action from the login form
$loginFields = array('username'=>'user', 'password'=>'pass'); //login form field names and values
$remotePageUrl = 'http://example.com/remotepage.html'; //url of the page you want to save  

$login = getUrl($loginUrl, 'post', $loginFields); //login to the site

$remotePage = getUrl($remotePageUrl); //get the remote page

function getUrl($url, $method='', $vars='') {
    $ch = curl_init();
    if ($method == 'post') {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies/cookies.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies/cookies.txt');
    $buffer = curl_exec($ch);
    curl_close($ch);
    return $buffer;
}
于 2009-07-04T15:37:18.833 に答える
0

http pecl エクステンションPEAR::HTTP_ClientSnoopy、および他の多くのライブラリ/クラスでも実行できます。(何らかの理由で) でこれを達成したい場合は、http ラッパーのストリーム コンテキスト オプションをfile_get_contents使用してPOST および Cookie パラメーターを設定し、stream_get_meta_dataを使用して Cookie を含む応答ヘッダーを読み取ることができます。

于 2009-07-04T15:13:32.063 に答える