首页
导航
博客
电子书
算法
众创
代码
随贴
关于我们
您好,欢迎来到码863代码分享网! 请
[登录]
/
[注册]
搜 索
curl可模拟httphttps登陆 及模拟登陆邮箱什么的 采集用到
编辑
代码正文
双击正文可选择全部
1[代码][php]curl可模拟httphttps登陆 及模拟登陆邮箱什么的 采集用到
尝试一下
function curlGet($url, $method = '', $post = '') { $ran = rand(1, 255); $ran1 = rand(1, 255); $ran2 = rand(1, 255); $ran3 = rand(60, 255); $ran3 = str_replace(array('192', '172', '127'), '', $ran3); $ip = "$ran3.$ran2.$ran1.$ran"; $headerArr = array("CLIENT-IP:$ip", "X-FORWARDED-FOR:$ip"); $cookieJar = tempnam(XZ_ROOT . './cookie', 'cookie.txt'); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt ($curl, CURLOPT_HTTPHEADER , $headerArr); //构造IP //curl_setopt ($curl, CURLOPT_REFERER, "http://www.baidu.com/"); //构造来路 curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // curl_setopt($curl,CURLOPT_TIMEOUT,3); //设定最大访问耗时 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieJar); curl_setopt($curl, CURLOPT_COOKIEFILE, $cookieJar); if ($method == 'post') { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS,$post); } curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $str = curl_exec($curl); $str = iconv("GBK", "UTF-8//IGNORE", $str); curl_close($curl); unset($curl); return $str; } 模拟浏览器登陆应用开发,最关键的地方是突破登陆验证。CURL技术不只支持http,还支持https。区别就在多了一层SSL加密传输。如果是要登陆https网站,php记得要支持openssl。还是先拿一个例子来分析。 //用户名 $login = 'username'; //密码 $password = 'password'; //163的用户登陆地址 $url = "https://reg.163.com/logins.jsp"; //post 要提交的数据 $fields = "verifycookie=1&style=16&product=mail163&username=".$login."&password=".$password."&selType=jy&remUser=&secure=on&%B5%C7%C2%BC%D3%CA%CF%E4=%B5%C7%C2%BC%D3%CA%CF%E4"; //用来存放cookie的文件 $cookie_file = dirname(__FILE__)."/cookie.txt"; //启动一个CURL会话 $ch = curl_init(); // 要访问的地址 curl_setopt($ch, CURLOPT_URL, $url); // 对认证证书来源的检查,0表示阻止对证书的合法性的检查。 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 从证书中检查SSL加密算法是否存在 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); //模拟用户使用的浏览器,在HTTP请求中包含一个”user-agent”头的字符串。 curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); //发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。 curl_setopt($ch, CURLOPT_POST, 1); //要传送的所有数据,如果要传送一个文件,需要一个@开头的文件名 curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); //连接关闭以后,存放cookie信息的文件名称 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); // 包含cookie信息的文件名称,这个cookie文件可以是Netscape格式或者HTTP风格的header信息。 curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); // 设置curl允许执行的最长秒数 //curl_setopt($ch, CURLOPT_TIMEOUT, 6); // 获取的信息以文件流的形式返回,而不是直接输出。 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // 执行操作 $result = curl_exec($ch); if ($result == NULL) { echo "Error:<br>"; echo curl_errno($ch) . " - " . curl_error($ch) . "<br>"; } // 关闭CURL会话 curl_close($ch);上 面这个例子相对简单,因为用户名和密码可以明文传输,而且登陆也不需要验证码。qq.com的模拟登陆相对就麻烦多了,首先要突破验证码这关,然后由于 QQ密码是经过javascript加密后传输的,登陆界面也要模拟出来,下一篇文章再继续深入谈谈QQ的模拟登陆。 参考资料: CURL详解 http://www.21andy.com/blog/20080507/1095.html Tags: curl,模拟登陆wuzuquan 2008/07/18 09:40您好,我现在在做一个模拟yahoo登陆的php程序,因为yahoo的密码是经过javascript加密的,而且在加密过程中引用了一个网页随机生成的字符串challenge,这个字符串在每次访问网页的时候都不一样。 如果我采用curl来模拟登陆,过程如下: 先curl_init()初始化一个curl连接,设置相关选项后,curl_exec();然后利用采集功能得到challenge的值,经过加密计算出加密后的密码。再来一次curl_exec,将用户名,加密密码等post出去。 可是这样做采集到的challenge永远都是过时的,这该怎么解决呢? 思路: 采集程序的思路很简单大体可以分为以下几个步骤: 1.获取远程文件源代码(file_get_contents或用fopen). 2.分析代码得到自己想要的内容(这里用正规匹配,一般是得到分页)。 3.跟根得到的内容进行下载入库等操作。 在这里第二步有可能要重复的操作好几次,比如说要先分析一下分页地址,在分析一下内页的内容才能取得我们想要的东西。 代码: 记的以前发部过部分的代码今天我在这里在简单的发部一下 复制PHP内容到剪贴板 PHP代码: @$nl=file_get_contents($rs['url']);//抓取远程内容 preg_match_all("/var url = "gameswf/(.*?).swf";/is",$nl,$connect);//进行正规匹配取得自己要的内容 mysql_query("insert ......插入数据库部分"); 上面的代码就是所有采集要用到的代码了,当然大家也可以用fope来作,我个人喜欢用file_get_contents。 下面在共享一下我的下载图片flash到本地的办法,太简单了两行代码 复制PHP内容到剪贴板 PHP代码: if(@copy($url,$newurl)){ echo 'ok'; } 在论坛上以前还发过一个图片下载函数这会也放上来给大家 复制PHP内容到剪贴板 PHP代码: /*本存图片函数*/ function getimg($url,$filename){ /*判断图片的url是否为空,如果为空停止函数*/ if($url==""){ return false; } /*取得图片的扩展名,存入变量$ext中*/ $ext=strrchr($url,"."); /*strrchr(string,char) 查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。*/ /*判断是否是合法的图片文件*/ if($ext!=".gif" && $ext!=".jpg"){ return false; } /*读取图片*/ $img=file_get_contents($url); /*此函数见http://hi.baidu.com/lixing880/blog/item/3c1786ec95077edb2e2e2161.html */ /*打开指定的文件*/ "); /*写入图片到指点的文件*/ fwrite($fp,$img); /*关闭文件*/ fclose($fp); /*返回图片的新文件名*/ return $filename.$ext; } 共享一下个人的采集心德: 1.不采那些作防盗链了的站,其实可以作假来路但是这样的站采集成本太高 2.采集尽量快的站,最好在本地进行采集 3.采集时有很多时候可以先把一部分数据存入数据库,等以后进行下一步的处理。 4.采集的时候一定要作好出错处理,我一般都是如果采集三次没有成功就跳过。以前经常就因为一条内容不能采就卡在那里一直的采。 5.入库前一定要作好判断,检查内容的合法,过滤不必要的字符串。
文明上网理性发言,请遵守新闻评论服务协议
0 条评论
发布评论
全部评论
最新
/
最热
暂无评论
加载更多
CopyRight 2002~2023 精通2100网 联系邮箱:qqtxt@163.com
版权所有:精通2100网
湘ICP备2023018646号-1
MYSQl共执行 3 个查询,用时 0.0019547939300537 秒,PHP脚本用时 0.004221 秒,占用内存 0.520 MB,Gzip 已启用