在卷曲gmail帐户时不能使用cookie

时间:2015-01-07 03:21:42

标签: php curl cookies

我正在尝试授权gmail,但它没有看到cookie。

  

错误。最有可能的是,您的浏览器没有设置cookie。检查一下   设置或打开新的浏览器窗口。

这是我的代码:

    $tmpfname = dirname(__FILE__).'/cookie.txt';
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, "https://accounts.google.com/ServiceLoginAuth");
    curl_setopt($ch, CURLOPT_POSTFIELDS, "GALX=MS-tSuNi3pg&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&service=mail&hl=ru&_utf8=%E2%98%83&bgresponse=%21A0Lf0QLPRaBwlUTp7ftMkStPvwIAAAAWUgAAAAcqAQFYvp-abJNRjR3DH8MqLNMd2V1lZIUZ8WD7-V22z_v8Lc-TfjBVXX8E0ElzA2hSNiaMERRhArrPj3NR1EuQ7UUE7KbsJ3DPYmn7jsKtGklYfxzO3Uonm6nKj_cfATL8wXFt_ngIdwFI0rY8J_2Kb51KDoxtcx6eEYfD8P0m-t6NcAITwyy3_0EG-1R12MNb2Lc7uLcMW76sHRTt2vc1zV1SjofqaYf73xJ5r-uatz_VTHQ_mT2JBU-92L32nx8qu9JF5__SAcj3-2umIjEiQvqd7KVxuFrSpKHiOGWkzr7CG9DMwFJVYeNvaE0liWW549s7yNcWIu_ERgau0KR0wyIC9A&pstMsg=1&dnConn=&checkConnection=youtube%3A137%3A1&checkedDomains=youtube&Email=*******&Passwd=*******&signIn=%D0%92%D0%BE%D0%B9%D1%82%D0%B8&PersistentCookie=yes&rmShown=1");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_COOKIESESSION, true );
    curl_setopt($ch, CURLOPT_COOKIEJAR, $tmpfname);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $tmpfname);
    $result = curl_exec($ch);

1 个答案:

答案 0 :(得分:1)

但Cookies只是一个非常小的问题。

谷歌无法轻松使用curl登录。由于Google使用隐藏在301重定向中的Cookie,因此curl可能无法保留它们。有时您还必须抓取HTML隐藏字段<input type=hidden name=”_NAME” value=”_VALUE”>

你有一些工作要领先于你。它并不像你想象的那么简单。使用一个curl HTTP GET当然无法做到这一点。 gMail是一场噩梦。

除了重定向上的大约50个HTTP GET和POST请求之外,Google还使用了超过100个JS XHR GET和POST请求以及大量的JSON。信息嵌入为cookie,URL查询字符串和POST数据。

最大的障碍是没有javaScript,gMail将无法运行。 Curl没有内置的JavaScript。没有JavaScript,你无法从gMail中获得任何东西。

这不是一个不可能的壮举。 100%确定它可以完成。你需要多长时间?是个问题。我的猜测是从登录到检索和发送邮件需要大约一年的时间。这就是为什么我建议你先尝试一个功能。然后你就会体会到你面前的一切。

您可以做的是转到您要发布或抓取数据的页面,记录当前的Cookie然后单击该功能,然后获取所有HTML,JS和XHR请求和响应。您可以在没有JavaScript的情况下复制该功能。但是你必须用你自己的一个使用curl替换一些/大多数/所有(不确定哪个)JS请求。

准备花一些时间更新代码,因为Google是一个不断变化的目标。他们不断改变工作方式,你必须跟上他们的步伐。

但Cookie很简单。

这是我关于登录Google语音的工作

首先我会去https://www.google.com/voice/ Google将Cookie放入301重定向。然后又有四个302重定向到了路上。

所以我不使用:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

我用:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);

然后我需要访问标题

curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

从响应标头中抓取Cookie

$data = curl_exec($ch);
if (curl_errno($ch)){
    $data .= 'Retrieve Base Page Error: ' . curl_error($ch);
}
else {
  $skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE)); 
  $head = substr($data,0,$skip);
  $e = 0;
  while(true){
    $s = strpos($head,'Set-Cookie: ',$e);
    if (!$s){break;}
    $s += 12;
    $e = strpos($head,';',$s);
    $cookie = substr($head,$s,$e-$s) ;
    $s = strpos($cookie,'=');
    $key = substr($cookie,0,$s);
    $value = substr($cookie,$s);
    $cookies[$key] = $value;

  }

然后为请求标题创建cookie:

 $cookie = '';
 $delim = '';
 foreach ($cookies as $k => $v){
   $cookie .= "$delim$k$v";
   $delim = '; ';
 }

然后抓住他们的重定向位置网址

$info = curl_getinfo($ch);
$url = $info['redirect_url']; 

看看它是否是重定向。

if (strlen($url) < 8){
   $url='https://accounts.google.com/ServiceLogin';
}
sleep(2);

然后将cookie放在标题中:

$request = array();
$request[] = "Host: accounts.google.com";
$request[] = "Pragma: no-cache";
$request[] = "Cookie: $cookie";
$request[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$request[] = "User-Agent: MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0";
$request[] = "Accept-Language: en-US,en;q=0.5";
$request[] = "Connection: keep-alive";
$request[] = "Cache-Control: no-cache";

curl_setopt($ch, CURLOPT_HTTPHEADER, $request);

当有一个Referer时(那不是我拼写推荐者的方式,那个将它添加到HTTP的人拼错了)

$request[] = 'Referer: https://accounts.google.com/ServiceLogin?service=grandcentral&passive=1209600&continue=https%3A%2F%2Fwww.google.com%2Fvoice&followup=https%3A%2F%2Fwww.google.com%2Fvoice&ltmpl=open';

从以前的重定向页面以相同的方式获取Cookie

然后抓住GALX cookie。然后执行下一个请求。

$galax = $cookies['GALX'];

$post = "GALX=$galax&continue=https://www.google.com/voice&followup=https://www.google.com/voice&service=grandcentral&ltmpl=open&_utf8=%E2%98%83&bgresponse=js_disabled&Email=assratbastard@gmail.com&Passwd=$password&signIn=Sign+in&PersistentCookie=yes&rmShown=1";

curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_POST, true);

在你进入之前,有很多这些。

未来发展的一个例子。这只是一个HTTP POST请求

查询字符串数据

continue=https://mail.google.com/mail/
service=mail
sarp=1

Cookie

Cookie:GAPS = 1:tx6dl5mwyjNKgiOEtjcvTvzGSNZqQQ:X9TX1quYjhjQfjho; GALX = kBQZRL4MXuU; GMAIL_RTT = 216; GMAIL_LOGIN = T1420606553375 /1420606580476分之1420606553375; NID = 67 = LbIeO3Xwxjs0nGgZaTOTLrhdJ5bb7_Ce-DE10-rKYZVzKVdM4XoKVr3T18sb9NLg_ghRkDoa-G-6vb66FdMR6uIMstAPd0qdQa18s1zGTHtvSOv8lRXaAdDDzqp8p8mguo0xA6VZnz_vV1JnoHMfulS9yoO4PA; SID = DQAAAAkBAADu9krli4XZTP6IWYOSEsmDBjYazF_ywtDmORhqZ8OeVGaC_K-3lSy4cNosYYXfG_-hrMd31fLPbAljFRt3Z5tpOAMLUPmzluYZC0_y1NTWMJ4D7I_bpIgiAsZO5oT9EFobf0vX50KfHLVKTHCetrgckDmLtMd4EkrOqsLkAAK9prD440GMqgCRoICNxLRVu-KS_-5N9mRrIuC3xsOsdi27Qfk4wPOqYNcO5sT1RGGgv1y7jwLqvHzHtz5DmlfARHv9lDtnKM8Gy3jo2Ax_7u8OrwIUP7Tcmz_9FJcj_q_Cz1cu94DbMHDN_qiUIwL1xYzClsdu3Z8EFiHDiEc8esXLg5_HkXPOPOvy-iGO9gTdLQ; LSID = SS:DQAAAAsBAABw1hSyS55goXFvcpcXQZQALGca7K26kfQ6HBc4c_agj3DJe_qMBMzqh0WXc3KNQ8OwP0lCPauBEhr3AdD0DyhCZQDFuIoglHPiw91_r-KIEZ62KjSmuTepv1UYDDEDiZeB5rYEOw4L6l2sOpOBmgBOZOyLfum4azJBLpEYo9kvMsX-OPUlqEJF0z0UMKM-R8Wh1Oxydr0j5R97U_juccmU6DqVsm0DTrP7rjPfv7cfZJ1wdqVemacZdfWjabrExrsXC21fin8ZUtXQI1dL8twk7fM7vo4fvKNdKoACBRUZpxltL9sTtBV-6QcynJF6Km5J6ICynuU3rtZvQNOS5VPIeajbcea7MI5p85XgweiVnw; HSID = A_8tAVmju5qj5J98Y; SSID = A_mBRb5lH8DXaOmm7; APISID = iNCCKNUIqLSXwe-P / AY-19Si5OAZhIv1aj; SAPISID = otuPxzrzp-BltlGm / AKleRqZyVwfhwwCB0; ACCOUNT_CHOOSER = AFx_qI5lJUnyOaSRIf2vxUKACWjny3nvliEw3h7h6NlUUHsklUqbMGc5NH7u6m6u4OSw8s5QqcsmV_fYx7-szFy4TVyvuA6A_itoAFoG-6B9txvdhP2T9gXFJzeRVMKHCQlRie0vibTz

POST数据

GALX = kBQZRL4MXuU&安培;继续= HTTPS%3A%2F%2Fmail.google.com%2Fmail%2F&安培;服务=邮件&安培; RM =假安培; ltmpl =默认&安培; SCC = 1&安培; SS = 1&安培; _utf8 =%E2% 98%83安培; bgresponse =%21A0JLwawFPV34bUQ3xjl5OdgBcQIAAABfUgAAABcqAQSqazjYJpDg-kapblPmSujml011OygP0EUqjVds9Vk_fynd6-gmQ4WyRLVnd1EWIKp_M68OiYoQpy-BsmXpxQoIqbS7pIne_scYIkttMyj3BqWGjYqKEQBS0Ynb39G7n7gVBo_e406b1Ww7Ny9f3nouYPJbOG-kMRdGsuhzBAGwT9v-vMum2Z36_N8gThf12ZQ0gNa1hmEUALqwF0H5leXH7Ex7JhXtGppJ7SiuFjvJYgs0SO_L1ptI5o6eHgud_ti8178KC5KXi0WheHrl5kM2NK6Dn3HhH85-5FTD4P74_HKAbqgH72IeKOosril6qqWekPx_ChXOmSLr6itlnhZjdbEr7g&安培; pstMsg = 1&安培; dnConn =安培; checkConnection = YouTube的%3A384%3A0&安培; checkedDomains = YouTube和安培; Email=g%40assratbastard@gamil.com& ; $密码&安培;登入=注册+在&安培; PersistentCookie = YES&安培; rmShown = 1