【问题标题】:What am I doing wrong? CURL PHP Cookies我究竟做错了什么? CURL PHP Cookie
【发布时间】:2012-12-14 21:10:48
【问题描述】:

我正在使用 curl 登录网站,它设法让我登录并显示“感谢您登录 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

【问题讨论】:

  • 添加 curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); 并使用有关当前问题的最新更改更新您的帖子。我在 cmets 中看到你的答案比这里描述的更进一步,但仍然需要帮助

标签: php cookies curl


【解决方案1】:

也许是因为变量名在顶部声明时有一个额外的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

【讨论】:

  • 谢谢,我已经改变了,但仍然有同样的问题。
【解决方案2】:

编辑: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);

【讨论】:

  • 添加了很多代码并更正了 cookie 名称,但情况仍然相同,没有关于 cookie 可写的错误代码。
  • 我注意到您在发送请求时没有 CURLOPT_COOKIEJAR 选项。
  • 我已经添加了这些,仍然没有任何区别 :( 到目前为止感谢您的帮助!
  • 现在是否正在创建cookie文件?如果不能,您可以尝试手动创建一个 cookie 文件和 chmod 777,然后给出您的变量 $cookie = '/full/path/to/cookie.txt' 的完整路径
  • cookie 文件正在创建中,
猜你喜欢
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 2019-12-23
  • 2014-06-15
  • 1970-01-01
  • 2014-05-14
  • 2015-08-26
相关资源
最近更新 更多