2012-02-08 36 views
4

私はサイトからデータを取り出し、必要に応じてフォーマットし、それをユーザに表示するアプリケーションを作っています。今、サイトはクロスサイトのスクリプトリクエストを許可していないので、PHPのカールを使ってページを取得しています。ブラウザでPHP curl、セッションを維持する

  • 、サイトには、あなたの最初の訪問は、ログインすると、後続の要求にあなたが要求された実際のページを与えるかを尋ねるクッキーを提供します。

  • PHPがカールしていると、サイトからは私にログインを要求するページが表示されます。そして、私はPHPサーバにクッキーを与えます。

このクッキーを保存して後続のリクエストに提示するにはどうすればよいですか?

+2

'ますcurl_setopt($ chを、CURLOPT_COOKIEFILE、 'cookiefile.txt')を追加します。 curl_setopt($ ch、CURLOPT_COOKIEJAR、 'cookiefile.txt'); '認証の前とそれ以降のすべての要求の前。 – Cheery

答えて

5

はクッキーを設定するために、いくつかのsetoptsを使用しています。

例:

$ch=curl_init(); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "c:/cookies/cookie.txt"); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "-"); 
1

クッキーを使用する必要があります。それは私が(私はHTMLコンテンツおよびスクレイピングするのに有用である可能エンコーディングの配列を返す)を行う方法は次のとおりです。

$curl_options = array(
    CURLOPT_RETURNTRANSFER => true,  /* return web page */ 
    CURLOPT_HEADER   => false, /* don't return headers */ 
    CURLOPT_FOLLOWLOCATION => true,  /* follow redirects */ 
    CURLOPT_ENCODING  => "",  /* handle all encodings */ 
    CURLOPT_AUTOREFERER => true,  /* set referer on redirect */ 
    CURLOPT_CONNECTTIMEOUT => 120,  /* timeout on connect */ 
    CURLOPT_TIMEOUT  => 120,  /* timeout on response */ 
    CURLOPT_MAXREDIRS  => 10,  /* stop after 10 redirects */ 
    CURLOPT_SSL_VERIFYHOST => 0, 
    CURLOPT_SSL_VERIFYPEER => 0 
); 
if ($ch = curl_init($url)) 
{ 
    curl_setopt_array($ch,self::$curl_options); 
    if ($cookie) 
     curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie); 
     $r = curl_exec($ch); 
     curl_close($ch); 
    } 
} 
+1

サンプルから塊を切り取り、関連する部分だけを残すことはできますか? –

3

私は、nababのコードを変更し、それを試してみましたが、私が望んでいたとして、それは完全に働いた:

$loginData = array('username'=>'myuser', 'password'=>'mypassword'); 
$postData = array('url'=>'http://stackoverflow.com'); 
$loginURL = "http://stackoverflow.com/login.php"; 
$addURL = "http://stackoverflow.com/addUrl.php"; 

$curl_options = array(
    CURLOPT_RETURNTRANSFER => true,  /* return web page */ 
    CURLOPT_HEADER   => false, /* don't return headers */ 
    CURLOPT_FOLLOWLOCATION => true,  /* follow redirects */ 
    CURLOPT_ENCODING  => "",  /* handle all encodings */ 
    CURLOPT_AUTOREFERER => true,  /* set referer on redirect */ 
    CURLOPT_CONNECTTIMEOUT => 120,  /* timeout on connect */ 
    CURLOPT_TIMEOUT  => 120,  /* timeout on response */ 
    CURLOPT_MAXREDIRS  => 10,  /* stop after 10 redirects */ 
    CURLOPT_SSL_VERIFYHOST => 0, 
    CURLOPT_SSL_VERIFYPEER => 0 
); 

$cookie = "cookie.txt"; 
if ($ch = curl_init()) 
{ 
    curl_setopt_array($ch,$curl_options); 
    if ($cookie) 
    { 
     curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie); 
     curl_setopt($ch, CURLOPT_POST, true); 
     curl_setopt($ch, CURLOPT_URL, $loginURL); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($loginData)); 
     $r = curl_exec($ch); 
     curl_setopt($ch, CURLOPT_URL, $addURL); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData)); 
     $r = curl_exec($ch); 

    } 
    curl_close($ch); 
} 
関連する問題