手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 免费部署 N8N 的 Zeabur 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

采用CURL登录量子统计

这是我很久前的文字了。只是。。。那个博客其实已经废掉了,被我用来尝试着赚点零花钱(域名费而已)
所以,这两天在用到它的时候,又COPY出来,做个备份。虽然其中大部分代码都有点一样,但其实还是略有区别,我这里还是贴我以前的文章。现在项目中用的就不贴了。。。

我自己的站点用的是量子统计,所以对于量子统计就需要有更多的研究和学习。
我想的是,如果我能够通过手机,每天在自己的某个指定页面,就能够看到朋友们过来时的关键字或者搜索引擎关键字等。我就可以利用他们有针对性的对网站进行优化?也可以随时关注网站的流量等信息了。

于是,想到什么就做什么,我直接用snoopy类开始尝试提交post数据,提交后取后返回值 ,并同时打开http://tongji.linezing.com/mystat.html页面(这是一个汇总页),但结果都是提示我需要登录。

如此反复尝试多次,也尝试用curl进行登录,但都是一直失败。最后我不得不祭起抓包利器:smartsniff,这是一个小工具,但是他的抓包功 能很强。于是我对我的行为开始抓包,从登录直到显示mystat.html页面,结果却发现,从登录开始,到显示mystat.html页面,一共抓了四 次包,他们分别是:

  1. http://www.linezing.com/login.php 登录提交页,POST提交
  2. http://www.linezing.com/router.php GET方式
  3. http://tongji.linezing.com/welcome.html GET方式
  4. http://tongji.linezing.com/mystat.html GET方式

其实我觉得奇怪的是,这四个页面是在同一台机器上,而且主机名却是bbs.linezing.com,好妖异。

不过,既然分析了抓包数据,得到这四个页面,那么剩下的就开始写代码了,欲知后事如何,请看周一的代码分析(其实是因为代码在单位的电脑上,在家里地无法更新而己),敬请关注。

PHP代码
  1. $cookiefile = tempnam( './log/' , 'cookie' );//设定cookie文件的路径 。  
  2. $ch = curl_init();  
  3. $header[]="Content-Type: application/x-www-form-urlencoded";    
  4. curl_setopt($ch, CURLOPT_URL, 'http://www.linezing.com/login.php');  //登录地址  
  5. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  //发送header ,其实这个header可以不发送  
  6. curl_setopt($ch, CURLOPT_POST, 1);  //这是POST数据  
  7. curl_setopt($ch, CURLOPT_POSTFIELDS, 'referer=&webname=index&username=用户名&password=密码&submit=%E7%99%BB%E5%BD%95');//http_build_query( $postData));    
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  //这个是代表curl_exec后取返回成字符串,而不是象WEB一样跳转  
  9. curl_setopt($ch, CURLOPT_HEADER, 0);  //curl返回的时候,默认都是带有header信息的,所以这里设为0,代表返回的时候不要header信息  
  10. curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); //这是在用sniff抓包的时候发现用了gzip,deflate的encoding,  
  11. curl_setopt($ch, CURLOPT_REFERER, 'http://www.linezing.com/');//记录来源的Referer  
  12. curl_setopt($ch, CURLOPT_COOKIEFILE,$cookiefile);  
  13. curl_setopt($ch, CURLOPT_COOKIEJAR,$cookiefile);  
  14. curl_exec($ch);  //我这里并没有取返回值,主要是把cookie记录下来  
  15.   
  16. curl_setopt($ch, CURLOPT_URL, 'http://www.linezing.com/router.php');  //登录后跳转的网址  
  17. //curl_setopt($ch, CURLOPT_COOKIEFILE,$cookiefile); 原先我在这里也记录cookie了,但事实上,我这样做之后,反而会把第一次登录时的cookie覆盖了。。。郁闷  
  18. //curl_setopt($ch, CURLOPT_COOKIEJAR,$cookiefile);  
  19. curl_setopt($ch, CURLOPT_REFERER, 'http://www.linezing.com/');  
  20. curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');  
  21. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
  22. curl_setopt($ch, CURLOPT_HEADER, 0);    
  23. curl_setopt($ch, CURLOPT_COOKIESESSION,1);  
  24. $res = curl_exec($ch);    
  25.   
  26. curl_setopt($ch, CURLOPT_URL, 'http://tongji.linezing.com/welcome.html');  //welcome页还会再判断是否登录,如果没有登录,会是一段JS跳到www.linezing.com  
  27. //curl_setopt($ch, CURLOPT_COOKIEFILE,$cookiefile);  
  28. //curl_setopt($ch, CURLOPT_COOKIEJAR,$cookiefile);  
  29. curl_setopt($ch, CURLOPT_REFERER, 'http://www.linezing.com/');  
  30. curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');  
  31. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
  32. curl_setopt($ch, CURLOPT_HEADER, 0);    
  33. curl_setopt($ch, CURLOPT_COOKIESESSION,1);  
  34. curl_exec($ch);    
  35.   
  36. curl_setopt($ch, CURLOPT_URL, 'http://tongji.linezing.com/mystat.html');    
  37. curl_setopt($ch, CURLOPT_COOKIEFILE,$cookiefile);  
  38. curl_setopt($ch, CURLOPT_COOKIEJAR,$cookiefile);  
  39. curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate');  
  40. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
  41. curl_setopt($ch, CURLOPT_HEADER, 0);    
  42. curl_setopt($ch, CURLOPT_COOKIESESSION,1);  
  43. $res = curl_exec($ch);  //这里获取返回值,我是想看一下是不是正确。。。  
  44. curl_close($ch);    
  45. echo htmlSpecialChars( $res );  
因为没写什么,所以就注释写的详细了一点

soap,又见SOAP

其实,不知道从几年前起,我就不再碰SOAP了,虽然在自己的项目里也悄悄的实现了一个soap。但那是我偷懒,其实我是将我最常用的一些工具封装了一个类,但是其他人需要调用,于是乎我利用soap,直接将这个类发布了,也就相当于实现了soap的一些最常用的方法。果然是个偷懒的好技巧。

提起这个,是最近有一些朋友来问我soap的相关问题,当初我对soap的使用也就是最多在header里做了一个验证。本来phptext.cn(小猪的网站)上有介绍的这篇文章,但后来他的网站好象崩过一次,数据就没有了。在此,我再介绍 一些文章,以前其实也都介绍过:
1、http://rdc.taobao.com/blog/qa/?p=6023
2、http://www.laruence.com/2010/03/26/1365.html
第一篇是淘宝qa团队,教你怎么使用soapUI进行soap接口测试,第二篇是风雪之隅写的关于soap怎么使用soapHeader之类的文章

当然在我以前的博客里也记录过一些创建soap的文章,比如这个:关于SOAP的几篇文章 ,也可以了解一下。
说实话,现在我真的忘了soap了。

Tags: soap

tmp目录下文件过多引发的 血案

tmp目录就是用来存放临时文件的。能引发什么血案?
嗯。当文件过多的时候,啥玩意都写不进,比如 session文件写不进,比如。。。vim打开文件的时候,会创建临时文件,然后也写不进。。问题多多了。
最后,甚至连rm /tmp/*都无法执行:
-bash: /bin/rm: Argument list too long
我晶啊,这样也行??
我想看看是不是session的问题,于是:
root@li408-193:/tmp# ls -l sess_*
-bash: /bin/ls: Argument list too long
我受不了了。。。
最后只能到根目录下面,先rm -rf /tmp/,请注意看最后一个斜杠
root@li408-193:/# rm -rf /tmp/
rm: cannot remove `/tmp': Directory not empty
我晶,这是肿么了。
最后只能rm -rf /tmp
然后mkdir tmp,chmod -R 0777 /tmp
整个世界清静了。。。

Tags: tmp

为列表提速

这是一段时间的我的经历和笔记,看过之前的博客的人应该会看到,我在用mongo,是的,我将大量的数据用mongo存储了,但最终我还是放弃了。理由有很多,不过我还是慢慢列出来吧
1、为什么用mongo
因为当初设计数据库的时候仓促,本来认为只有2~30万的数据,但最终却发现会有200多万条,以后可能还会更加多,所以当初很多大字段都扔在了一个表里,导致如果用in查询,非常慢。所以我想用mongo,扔到内存里查询,看看效果是否会很好。

2、为什么又放弃使用mongo了
说实话,mongo在做关系查询的方面确实挺不错,但存在的问题是我的数据都是用php往mongo里导入,而mongo对于数字和字符串还是认得比较严 的。当然这都不是问题。。问题是现在没有专门的DBA,以后对数据不太容易,也不太方便管理。毕竟目前公司的整体项目,大部分都是用mysql在做处理, 所以,为了配合更多人,才放弃使用mongo(当然,也是为了节约内存)

3、mongo在使用时的优缺点
其实mongo在仅做处理这些条件查询的时候,并没有想象中的那样。当然确实很快,不过在第一次查询的时候还是有点慢的,然后在数据没有变化的时候查询数 据都在0.00x秒,不过,我真的没有太在意(其实有点在意,但因为那个条件也是用mysql生成出来的,再加上查询之前对于那些字段都得做一次强制转 换,否则对于查询的时候可能就出不来数据)

4、最终我怎么做了
既然我已经知道我原来的数据表的问题在哪里,我就想办法处理掉不就完了?于是写了一个脚本,自己将主表的数据中的几个重要的,用来查询和排序的字段拎出来,重建一个表,用来查询,将可变字段改成定长字段,为了提速。这样一来,速度比原来最少快了两个等级。

5、下一步我会怎么做
其实现在做很多事情都是偷懒了,比如对于字段是int型的时候,却还是用的where id = '1',而不是where id = 1;
所以这是后期考虑优化的地方。
当然因为将主要字段分拆成表,所以带来的另一个问题是,当更改原表的时候,需要对新表做更新处理。

6、最后说一下
原表的索引,原来达到了300多M,后来因为把数据迁到新表(做冗余),在新的表建的索引,只有70多M,而且原表因为将索引清除了,编辑和插入的数据又上了一个等级,最终还是觉得这样有优势 。

---PS
不一定要学我,我这也是自己的经历,没有什么可比和可参照性。当然你要骂我那是可以的

Tags: mongo

转:HTML 格式的邮件如何定义 CSS

转这篇文章之前,先介绍一下"SEGMENTFAULT(http://segmentfault.com/)",或许国内已经有很多人知道这个网站了,但毕竟它还是一个新站,看趋势是想做成stackflow之类的国内站,他这么说自己的网站:

XML/HTML代码
  1. 在 Google 搜索技术问题时突然发现从某段时间开始,所有的问题都被指 向 StackOverflow 这个网站了。而且这个网站的问题和答案质量都很高。但是有一点我很烦恼,没有中文,虽然对技术人员来说看懂英文是最基本 的,但是如果能有一个类似的中文问答社区,对于技术的交流是非常有益的。  
  2.   
  3. 因此,我们借鉴了 StackOverflow 的评分机制,搭建了这个网站。最初的想法很简单:我们在搜索技术问题时,能有中文的优质答案出现在搜索结果里。  

上原文吧:
问:HTML 格式的邮件如何定义 CSS
内容:

按照写网页的习惯,的把 css 写在 header 里,样式在 Outlook 和 Mail 客户端都能够正常显示。但是,发现在 Gmail 的 Web 界面上,移除了 body 及其外部的所有代码。
Email HTML 如下:

XML/HTML代码
  1. <!doctype html>  
  2. <head>  
  3.     <meta charset="UTF-8" />  
  4.     <style type="text/css">  
  5.         .title { color: red }      
  6.     </style>  
  7. </head>  
  8. <body>  
  9.     <h2 class="title">Email title here</h2>  
  10. </body>  
  11. </html>  

 

邮件发出后,在 Gmail 里看到的邮件内容代码只剩下了:
XML/HTML代码
  1. <h2 class="title">Email title here</h2>  
如果想在 Gmail 里正确的显示样式,目前只发现下面的方式才显示正常:
XML/HTML代码
  1. <h2  style="color: red">Email title here</h2>
难道,整封邮件只能这样实现了么,有别的方法吗?

回答:

1、经过google搜索,发现gmail目前支持inline的css方式。

看来只能悲剧的inline了。

2、国外有篇博客讲了怎样写HTML邮件:<HTML Email Coding 101> http://litmus.com/blog/html-email-cod...

不仅仅是CSS。我看过,写得很好,图文并茂,你可以看看

Tags: segmentfault, typecho