mjj520 发表于 2012-6-2 09:14 
唉 cpu超级耗芸豆的

查了下开发文档,fetchurl原来是不算CPU的,是我误导了大家。

 发表于 2012-6-1 17:30:17 |只看该作者 |倒序浏览

这里稍微说明,$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,你懂的。

  1. //new fetch
  2. function new_fetch($url,$post_fields,$cookies_file){
  3. $f = new SaeFetchurl();
  4. if($post_fields==''){
  5. $f->setMethod('GET');
  6. }else{
  7. $f->setMethod('POST');
  8. }
  9. $f->setAllowRedirect(false);
  10. $f->setPostData($post_fields);
  11. $cookies=unserialize(file_get_contents($cookies_file));//提取COOKIES
  12. $f->setCookies($cookies);//设置COOKIES
  13. $content=$f->fetch($url);
  14. $cookies=mkcookies($cookies,$f->responseCookies());//模拟构造COOKIES
  15. file_put_contents($cookies_file,serialize($cookies));//COOKIES序列化保存
  16. $headers=$f->responseHeaders();
  17. $location=$headers['Location'];
  18. if($location<>''){//本来打算用HTTPCODE来判断的,结果总返回200,所以改用判断头是否有LOCATION
  19. $url=$location;
  20. $content=new_fetch($url,'',$cookies_file);
  21. }
  22. return $content;
  23. }

再附上mkcookies的函数,也很无奈,fetchurl的responseCookies也太坑爹了,就算参数设置FALSE都还是不认识什么是COOKIE,返回些垃圾,只要重新处理下,并且模拟下浏览器对cookie的操作。

  1. //处理COOKIES文件
  2. function mkcookies($cookies,$newcookies){
  3. foreach($newcookies as $cookie){
  4. foreach($cookie as $key=>$value){
  5. $cookies[$key]=$value;
  6. break;
  7. }
  8. }
  9. return $cookies;
  10. }

以上表述不专业,请各位童鞋指教。

 
 

【转】重新封装FetchUrl函数一枚,支持COOKIES,喜欢领走~!的更多相关文章

  1. 使用promise手动封装ajax函数

    最近在做一个单页应用,node和浏览器仅通过json传输数据,因为是只有自己用等于是锻炼一下自己,所以也不用考虑seo的问题,node端我已经写好了,但是浏览器端想要用ajax原生太麻烦,用封装的函数 ...

  2. 原生javascript封装的函数

    1.javascript 加载的函数 window.onload = function(){} 2.封装的id函数 function $(id) { return document.getElemen ...

  3. jQuery编写插件--封装全局函数的插件(一些常用的js验证表达式)

    上一篇写到了jQuery插件的3种类型,介绍了第一种类型的写法--封装jQuery对象的方法插件.这一篇要介绍第二种插件类型:封装全局函数的插件:这类插件就是在jQuery命名空间内部添加函数:这类插 ...

  4. Thinkphp3.2.3框架下封装公共的函数,例如封装CURL函数来获取接口数据

    当我们需要在控制层调用相同的封装函数时,写多次相同的函数,显得代码十分的拉杂,不精简: TP框架有一个很好的机制,可以再Common定义一个function.php函数,当我们在控制层调用的时候直接调 ...

  5. Thinkphp框架下封装文件下载函数

    第一步:开启php_fileinfo.dll 方法:打开php.ini,将874行的;extension=php_fileinfo.dll前面的分号注释去掉即可: 第二步:控制层封装文件下载函数 fu ...

  6. mstsc远程连接发生身份验证错误要求的函数不受支持

    在win7电脑上使用远程连接连接一台服务器时,出现发生身份验证错误要求的函数不受支持的错误,原因是本地组策略配置错误,如下图: 解决办法: 进入windows命令行模式输入命令: 会弹出本地策略组编辑 ...

  7. 封装PDO函数

    funPDO.php <?php /** * @title: 封装PDO函数 * * @Features: * 1. 封装 SELECT ,INSERT,DELETE,UPDATE 操作 @do ...

  8. WIN7远程桌面连接--“发生身份验证错误。要求的函数不受支持”

    故障现象:WIN7发现远程桌面无法连接了,报“发生身份验证错误.要求的函数不受支持”的错误: 解决办法:开始菜单->运行gpedit.msc 打开配置项:计算机配置>管理模板>系统& ...

  9. Win10 远程桌面连接出现“要求的函数不受支持”的解决办法之修改注册表

    问题起因 笔者自己在阿里云上搞服务器,有一台 Windows Server 必须通过远程桌面连接来管理,由于没能完全关掉 Win10 自带的烦人的系统更新,导致昨天安装完更新后出现了连接远程桌面时“要 ...

随机推荐

  1. iOS AFNetWorking 下载pdf文档

    + (void)downLoadPdf:(NSString *)url pdf_id:(NSString *)pdf_id block:(APIFilePath)pdfFilePath {    NS ...

  2. LightOJ1027 A Dangerous Maze(期望)

    题目大概说你正在起点,面前有$n$个门,每个门有一个数字$x$,正数表示开这个门$x$分钟后会出去,负数表示开这个门$-x$分钟后会回到起点.选择门的概率是一样的且每次选择互不影响.问出去的时间期望是 ...

  3. 新手107条常用javascript语句

    1.document.write( " "); 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:document- >html- >(head,body)4 ...

  4. WPF快速入门系列(2)——深入解析依赖属性

    一.引言 感觉最近都颓废了,好久没有学习写博文了,出于负罪感,今天强烈逼迫自己开始更新WPF系列.尽管最近看到一篇WPF技术是否老矣的文章,但是还是不能阻止我系统学习WPF.今天继续分享WPF中一个最 ...

  5. 作业七:团队项目——Alpha版本冲刺阶段

      本次作业为期三周时间,要求各组结合所选项目并阅读教材<构建之法>第六章内容,完成项目的Alpha版本.本阶段的主要内容如下:(20分) 1. 每天组织一次站立会议,讨论每个成员的昨天进 ...

  6. 自己动手写UI库——引入ExtJs(布局)

    第一: 来看一下最终的效果 第二: 来看一下使用方法: 第三: Component类代码如下所示: public class Component     {                   pub ...

  7. 喜迎2015年新年:坦克大战(Robocode)游戏编程比赛图文总结

    2015春节前,葡萄城的软件工程师以特有的方式来迎接新年——2015新年编程邀请赛. 邀请赛的初衷,是和大家一起,寻找编程最初的单纯的快乐.       在代码的世界里,添加动力,继续远航.      ...

  8. [BTS] RFC IDOC_INBOUND_ASYNCHRONOUS

    Error Message: Log Name:      ApplicationSource:        BizTalk ServerDate:          9/10/2013 3:56: ...

  9. JETTY嵌入式Web容器的开发

    JETTY嵌入式Web容器的开发 JETTY嵌入式Web容器体积小,启动速度快,性能好,免费开源,是一款很适合开发调试和简单演示的轻量级Web容器. 而且它的嵌入式的特点,使得开发者可以直接将容器的操 ...

  10. SSL双向认证java实现(转)

    本文通过模拟场景,介绍SSL双向认证的java实现 默认的情况下,我认为读者已经对SSL原理有一定的了解,所以文章中对SSL的原理,不做详细的介绍. 如果有这个需要,那么通过GOOGLE,可以搜索到很 ...