mjj520 发表于 2012-6-2 09:14
唉 cpu超级耗芸豆的
查了下开发文档,fetchurl原来是不算CPU的,是我误导了大家。
这里稍微说明,$url:访问路径;$post_fields:post的数组;$cookies_file:cookies文件存放的位置。 由于SAE的CURL估计与应用是不同一个层理运行的,所以cookies_file就失效了,SAE封装的fetchurl也是根据CURL重新封装的,但有BUG,例如如果访问的页面有跳转时,COOKIES是不能能跟随的,多以导致很多登录的页面无法实现登录。 本来打算用CURL重新封装,但为了节省时间还是,还是在SAE的fetchurl的基础上稍微修改吧,虽然这样浪费CPU资源,但估计不多可以忽略,就让CPU飞一会吧。 有些童鞋会问为什么非要用cookies_file,因为cookies跨页不能做跨页传递,而且也不能长时间保存,保存cookies_file可以跨页调用,也已长时间保存,设置可以跨应用,所以还是用cookies_file吧。
$cookie_file ='saestor://'.$DOMAIN/cookies.txt'; 或者 $cookie_file ='saemc://cookies.txt';
切记不可以用本机路径。因为SAE不支持本地IO,上面的要打开stroge,下面的要打开memcahe,你懂的。
- //new fetch
- function new_fetch($url,$post_fields,$cookies_file){
- $f = new SaeFetchurl();
- if($post_fields==''){
- $f->setMethod('GET');
- }else{
- $f->setMethod('POST');
- }
- $f->setAllowRedirect(false);
- $f->setPostData($post_fields);
- $cookies=unserialize(file_get_contents($cookies_file));//提取COOKIES
- $f->setCookies($cookies);//设置COOKIES
- $content=$f->fetch($url);
- $cookies=mkcookies($cookies,$f->responseCookies());//模拟构造COOKIES
- file_put_contents($cookies_file,serialize($cookies));//COOKIES序列化保存
- $headers=$f->responseHeaders();
- $location=$headers['Location'];
- if($location<>''){//本来打算用HTTPCODE来判断的,结果总返回200,所以改用判断头是否有LOCATION
- $url=$location;
- $content=new_fetch($url,'',$cookies_file);
- }
- return $content;
- }
再附上mkcookies的函数,也很无奈,fetchurl的responseCookies也太坑爹了,就算参数设置FALSE都还是不认识什么是COOKIE,返回些垃圾,只要重新处理下,并且模拟下浏览器对cookie的操作。
- //处理COOKIES文件
- function mkcookies($cookies,$newcookies){
- foreach($newcookies as $cookie){
- foreach($cookie as $key=>$value){
- $cookies[$key]=$value;
- break;
- }
- }
- return $cookies;
- }
以上表述不专业,请各位童鞋指教。
|
|
|
最新文章
- Whatbeg&#39;s blog 文章列表
- 十五天精通WCF——第五天 你需要了解的三个小技巧
- JS学习笔记(一) 概述
- poj 1094 Sorting It All Out(nyoj 349)
- 什么是锚点(AnchorPoint)
- angular入门系列教程4
- Codeforces Beta Round #10 D. LCIS
- Python脚本控制的WebDriver 常用操作 <;二十八>; 超时设置和cookie操作
- OC5_NSMutableString操作
- centos6.4下没有heartbeat包解决办法
- hdu1535(最短路)
- Unity + iBatis + Asp.net Mvc 系统搭建
- 批处理改hosts
- R语言 write.xlsx() 写入同一excel,及同一sheet注意
- C Primer Plus 第10章 数组和指针 编程练习
- 类成员(static)和final修饰符
- html固定表头,表单内容垂直循环滚动
- Could not get lock /var/lib/dpkg/lock更新问题
- SQL Server 2008 表分区的含义
- 所有标准API
热门文章
- 【Visual Lisp】Visual Lisp属性与方法
- “”?: H3C SSH 配置+
- css伪类运用
- PHP注册手机获取验证码代码
- extjs中form.reset(true)出现的bug修复
- poj 2240 Arbitrage
- Arcgis for Javascript 出现&ldquo;init.js->;TypeError: f is not a function&rdquo;
- CentOS升级MySQL到5.5
- AngularJS应用页面切换优化方案
- sublime text配置记录