PHP cURL 使用cookie 模拟登录
cURL是什么
cURL: http://php.net/manual/zh/book.curl.php
PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务器、使用各种协议。libcurl 目前支持的协议有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同时支持 HTTPS 证书、HTTP POST、HTTP PUT、 FTP 上传(也能通过 PHP 的 FTP 扩展完成)、HTTP 基于表单的上传、代理、cookies、用户名+密码的认证。
这些函数在 PHP 4.0.2 中引入。
使用cookie模拟登录,来查看需登录后才能浏览的页面 (get方式)
set_time_limit(0); //目标url $url = "http://www.aa.com/index.php/Home/task/add"; //使用的cookie,路径自己修改 $cookie_file = __DIR__ . "/".'cookies.txt'; $cookie_file = realpath($cookie_file); $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //使用上面获取的cookies $response = curl_exec($ch); curl_close($ch); echo $response;
使用cookie模拟post提交请求
set_time_limit(0); //目标url $url = 'http://www.aa.com'; //post查询条件 $fields = 'claimType=01&orderBy=1&pageSize=300&page.webPager.action=refresh&page.webPager.pageInfo.totalSize=8000&page.webPager.pageInfo.pageSize=300&page.webPager.currentPage=1'; //cookie文件 $cookie_file = __DIR__ . "/".'cookies.txt'; $cookie_file = realpath($cookie_file); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 60, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_COOKIEFILE => $cookie_file, CURLOPT_COOKIEJAR => $cookie_file, CURLOPT_HTTPHEADER => array( "accept: */*", "accept-encoding: gzip, deflate", "accept-language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,ja;q=0.2", "cache-control: no-cache", "connection: keep-alive", "content-type: application/x-www-form-urlencoded", //"cookie: $cookie", "origin: http://www.**.com", "pragma: no-cache", "referer: http://www.****.com", "user-agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36", "x-requested-with: XMLHttpRequest" ), )); //url curl_setopt($curl, CURLOPT_URL, $url); //post fields curl_setopt($curl, CURLOPT_POSTFIELDS, $fields); $response = curl_exec($curl); $err = curl_error($curl); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); echo $response;
注意:在测试的时候,用火狐浏览器导出cookie为txt文件时,如果有些cookie项是关闭浏览器就失效,则导出的cookie文件中会缺失过期时间这一项,导致使用curl时功能不正常。所以在cookie文件生成后,可先检查下项。
如,下面是缺失的
www.qlm.com FALSE / FALSE PHPSESSID as6if5c6d5ts23nrsgbq0a94b7 www.qlm.com FALSE / FALSE 1482396897 uname %E7%AE%A1%E7%90%86%E5%91%98
可以手动补全,变成下面这样
www.qlm.com FALSE / FALSE 0 PHPSESSID as6if5c6d5ts23nrsgbq0a94b7 www.qlm.com FALSE / FALSE 1482396897 uname %E7%AE%A1%E7%90%86%E5%91%98