但 Cookie 只是一个很小的问题。
Google 没有让使用 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 数据的形式嵌入。
最大的障碍是 gMail 不能在没有 javaScript 的情况下运行。 Curl 没有内置 JavaScript。如果没有 JavaScript,您将无法从 gMail 中获得任何信息。
这不是不可能的壮举。 100%肯定可以做到。你需要多长时间?是问题。我的猜测是,从登录到检索和发送邮件需要大约一年的时间。这就是为什么我建议你先尝试一个功能。然后,您将领略眼前的一切。
您可以做的是转到您要从中发布或抓取数据的页面,记录当前的 cookie,然后单击该功能,然后获取所有 HTML、JS 和 XHR 请求和响应。您可以在没有 JavaScript 的情况下复制该功能。但是您必须使用 curl 用您自己的一个替换一些/大多数/所有(不确定是哪个)的 JS 请求。
准备好花一些时间更新您的代码,因为 Google 是一个不断变化的目标。他们不断改变做事的方式,你必须跟上他们的步伐。
但是 cookie 很简单。
这是我登录 Google Voice 的工作
首先我会去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);
从响应头获取 Cookies
$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 = '; ';
}
然后捕获他们的重定向位置 url
$info = curl_getinfo($ch);
$url = $info['redirect_url'];
看看是不是重定向。
if (strlen($url) < 8){
$url='https://accounts.google.com/ServiceLogin';
}
sleep(2);
然后把cookie放到header中:
$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时(这不是我拼写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<mpl=open';
以与之前相同的方式从重定向页面获取 cookie
然后获取 GALX cookie。然后执行下一个请求。
$galax = $cookies['GALX'];
$post = "GALX=$galax&continue=https://www.google.com/voice&followup=https://www.google.com/voice&service=grandcentral<mpl=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
Cookies
Cookie: GAPS=1:tx6dl5mwyjNKgiOEtjcvTvzGSNZqQQ:X9TX1quYjhjQfjho; GALX=kBQZRL4MXuU; GMAIL_RTT=216; GMAIL_LOGIN=T1420606553375/1420606553375/1420606580476; NID=67=LbIeO3Xwxjs0nGgZaTOTLrhdJ5bb7_Ce-de10-rKYZVzKVdM4XoKVr3T18sb9NLg_ghRkDoa-G-6vb66FdMR6uIMstAPd0qdQa18s1zGTHtvSOv8lRXaAdDDzqp8p8mguo0xA6VZOPAvV1; 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
发布数据
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&$password&signIn=Sign+in&PersistentCookie=yes&rmShown=1