使用PHP cURL扩展在两个网站之间共享相同的cookie

时间:2010-05-16 22:08:56

标签: php cookies curl

我想在我的Gmail帐户中获取一些电子邮件的内容。我想使用PHP cURL扩展来执行此操作。我在第一次尝试时遵循了以下步骤:

  1. 在PHP代码中,输出https://www.google.com/accounts/ServiceLoginAuth
  2. 的内容
  3. 在浏览器中,用户输入用户名和密码进行登录。
  4. 在PHP代码中,将cookie保存在名为cookie.txt的文件中。
  5. 在PHP代码中,向https://mail.google.com/发送请求以及从cookie.txt检索到的cookie并输出内容。
  6. 以下代码不起作用:

    $login_url = 'https://www.google.com/accounts/ServiceLoginAuth';
    $gmail_url = 'https://mail.google.com/';
    $cookie_file = dirname(__FILE__) . '/cookie.txt';
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    curl_setopt($ch, CURLOPT_URL, $login_url);
    $output = curl_exec($ch);
    echo $output;
    
    curl_setopt($ch, CURLOPT_URL, $gmail_url);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    $output = curl_exec($ch);
    echo $output;
    
    curl_close($ch);
    

1 个答案:

答案 0 :(得分:4)

你的做法是错误的。您无法检索https://www.google.com/accounts/ServiceLoginAuth的内容并将其输出,希望用户填写详细信息并按登录。由于表单定义为

<form action="https://www.google.com/accounts/ServiceLoginAuth" method="post">

浏览器会将登录详细信息提交到该页面,您的脚本永远不会获取cookie。您需要使用用户名和密码向https://www.google.com/accounts/ServiceLoginAuth 提交帖子请求。只有这样,curl才会收到cookie的回复。

那就是说,我建议你抓住这一切,在GMail中启用IMAP并使用它来访问你的电子邮件。