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. phpcms开启、关闭在线编辑模板的方法

    打开 caches/configs/system.php 文件 找到 'tpl_edit'=> 0,//是否允许在线编辑模板 修改此行代码中的数字为 1或0 即可

  2. 【概念笔记】JavaEE - web part2

    IT`huhui前言录 续JavaEE - web part1 链接http://www.cnblogs.com/ithuhui/p/5930745.html, 持续修改更新. Cookie 1. 定 ...

  3. 打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数 其各位数字立方和等于该数本身。 例如:153是一个 "水仙花数 " 因为153=1*1*1+5*5*5+3*3*3

    for (int i = 100; i <= 999; i++) { int geWei, shiWei, baiWei; baiWei = i / 100; shiWei = (i - bai ...

  4. ORACLE之UTL_FILE包详解

    1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录.      方法:        ...

  5. 从RTSP协议SDP数据中获得二进制的SPS、PPS

    在RTSP协议的交互过程中,第二步客户端发送DESCRIBE请求之后,服务端会返回SDP内容,该SDP内容中有关于媒体和会话的描述,本篇文章主要给出如何从SDP字符串中得到H264视频信息中的sps. ...

  6. 深入理解java虚拟机【Java内存结构】

    Java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下: 其中方法区和堆是由所有线程共享的数据区. Java虚拟机栈,本地方法栈和程序计数器是线程隔离的数据区. (1 ...

  7. PC-PC-单片机(Arduino)通信实例

    请仔细理解相关参数,如端口设置.IP设置.COM口设置......等等.....不要盲目COPY.....这涉及2台电脑和一个单片机,其中一台电脑作为服务器并与单片机相连,负责通过网络与客户端通信(s ...

  8. JavaScript中的property和attribute

    property,attribute都作“属性”解,但是attribute更强调区别于其他事物的特质/特性. 而在JavaScript中,property和attribute更是有明显的区别.众所周知 ...

  9. Minifying Angular应用时产生的问题

    一.产生的问题 如果你正在进行AngularJS的项目开发,生产时Minified JS文件有没有遇到下面问题: angular.module("myApp", []) .cont ...

  10. Sharing count on Facebook, Twitter, and LinkedIn

    最近一段时间一直在研究有关Social Network的东西,这里有几个在当前国外主流社交网站上用来显示分享数量的API,记录一下,今后可能会用得着. Facebook Facebook将FQL(Fa ...