0

curl を使用して Web サイトにログインしていますが、なんとかログインしてページを表示し、「Jack Brown にログインしていただきありがとうございます」と表示され、メンバー エリアが表示されます。

ただし、サーバー「/tmp/cookie.txt」でCookieファイルが作成されていません

ログインしたので、再びcurlを使用してメンバーエリアからデータを取得したいのですが、ページのこの部分を実行すると、「ログインして続行してください」というメッセージが表示されます。

最初のコードはログイン用です (これでログインできますが、Cookie ファイルは作成されません)。

<?php

$email    = 'email@here.com';
$password = 'passwordhere';
$rememberMe = '';
$redirect = '';
// initial login page which redirects to correct sign in page, sets some cookies
$URL = 'https://www.website.co.uk/home';
$coookie = tempnam ("/tmp", "CURLCOOKIE");

$ch  = curl_init();

curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);        
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$page = curl_exec($ch);


$URL2 = "login url is normally here"; // this is our post url

$postdata = "_58_login=".$email."&_58_password=".$password."&_58_rememberMe=".$rememberMe."&_58_redirect=".$redirect; 

$post = substr($post, 0, -1);

// set additional curl options using our previous options
curl_setopt($ch, CURLOPT_URL, $URL2);
curl_setopt($ch, CURLOPT_REFERER, $URL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);

$page = curl_exec($ch); // make request

// try to find the actual login form
if (!preg_match('/Thanks for loggin in/is', $page, $form)) {
    die('Erorr: Could not login!');
}
var_dump($page); // should be logged in

// END OF LOGIN

この次のコードは同じドキュメント内にあり、コンテンツをプルできるメンバー エリアの別のページを開くために使用されますが、このページはログインしていないというメッセージを返すだけです。

$URLOPEN = 'http://www.website.co.uk/membersareacontent';
$URL5 = 'http://www.website.co.uk/thanksforlogginin';


curl_setopt($ch, CURLOPT_URL, $URLOPEN);
curl_setopt($ch, CURLOPT_REFERER, $URL5);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);        
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$page2 = curl_exec($ch);
var_dump($page2); // should be show members content
4

2 に答える 2

0

編集:sbeliv01には、Cookieのスペルが間違っているというポイントがあります。そうでない場合は、コードの先頭にこれを追加して、エラーが発生した場合に表示してください。

error_reporting(E_ALL);
ini_set("display_errors",1);

そして、ファイルが書き込み可能かどうかをチェックし、Cookieファイルが書き込み可能であることを確認するためのこのコード:

// change $cookie_file_path to yours
$fp = fopen($cookie_file_path,'wb') or die("can't open cookie file");
fclose($fp);

また、ここでCookieオプションを設定していないことに気づきました。

// set additional curl options using our previous options
$ch  = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL2);
curl_setopt($ch, CURLOPT_REFERER, $URL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);        
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
于 2012-12-14T21:23:11.710 に答える
0

おそらく、変数名がo上部で宣言されたときに余分なものがあり、後でcURLで使用しているものが原因です。

$coookie = tempnam ("/tmp", "CURLCOOKIE"); // Notice coookie with the extra o

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); // Spelled with only two o's here
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);  // Spelled with only two o's here
于 2012-12-14T21:24:02.340 に答える