【转】重新封装FetchUrl函数一枚,支持COOKIES,喜欢领走~!

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
简介: mjj520 发表于 2012-6-2 09:14 唉 cpu超级耗芸豆的 查了下开发文档,fetchurl原来是不算CPU的,是我误导了大家。    发表于 2012-6-1 17:30:17 |只看该作者 |倒序浏览 分享到:   这里稍微说明,$url:访问路径;$post_fields:post的数组;$cookies_file:cookies文件存放的位置。

 

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,你懂的。
PHP代码 
  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的操作。
PHP代码 
  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. }
以上表述不专业,请各位童鞋指教。


 
 
相关实践学习
10分钟Serverless部署PHP商城
.本实验带您体验如何使用 Serverless 应用引擎 SAE 快速部署一个PHP商城,并体验 SAE 带来的弹性伸缩、应用监控能等强大能力。
SAE的功能与使用入门
欢迎来到《SAE的功能与使用入门》,本课程是“云原生Serverless Clouder认证“系列中的第三阶段。课程将向您介绍阿里云Serverless应用引擎(SAE)服务相关的概念、特性与使用方式。通过课程将带您逐步深入探索Serverless世界,借助SAE服务,即使没有丰富的云计算和IT经验,也能够让开发人员在实际业务场景中便捷的掌握如何构建和部署应用程序,快速拥抱Serverless架构,将精力聚焦在应用代码和业务逻辑的实现上。 学习完本课程后,您将能够: 掌握Serverless应用引擎(SAE)的基本概念与核心优势 了解Serverless应用引擎(SAE)的核心功能 掌握使用Serverless应用引擎(SAE)的开发和部署流程 了解Serverless应用引擎(SAE)的适用场景和最佳实践 &nbsp;
目录
相关文章
|
2月前
|
存储 编解码 开发者
Cookie原理及使用细节
Cookie原理及使用细节
45 0
|
JSON 数据格式
易语言 精易模块 操作json数据
作者主页:https://www.couragesteak.com/
易语言 精易模块 操作json数据
|
10天前
|
存储 Web App开发 JavaScript
浏览器【详解】Cookie(含Cookie的起源,属性,个数和大小限制,作用,优点,缺点,JS 的操作方法等)
浏览器【详解】Cookie(含Cookie的起源,属性,个数和大小限制,作用,优点,缺点,JS 的操作方法等)
13 0
|
11天前
|
JSON 数据格式
axios发送post请求,如何接受和返回一个axios的字段,解决bug的方法,困难的事情先从简单做起,先从发送一个axios的post请求做起,解决方法查别人的资料,查看F12看network就行
axios发送post请求,如何接受和返回一个axios的字段,解决bug的方法,困难的事情先从简单做起,先从发送一个axios的post请求做起,解决方法查别人的资料,查看F12看network就行
|
2月前
|
前端开发
AJAX发送请求方法封装和请求函数底层刨析以及axios二次封装
AJAX发送请求方法封装和请求函数底层刨析以及axios二次封装
|
2月前
|
存储 搜索推荐 UED
通俗科普:Cookie和Session是什么?
通俗科普:Cookie和Session是什么?
30 0
|
2月前
|
存储 前端开发 Java
【源码共读】在前端如何操作 Cookie
【源码共读】在前端如何操作 Cookie
83 1
|
2月前
|
前端开发 数据可视化 Dubbo
深入解析 Axios 取消请求:2 种方法助你掌握控制权
在前端开发中,网络请求是非常常见的操作。而有时候,我们可能需要在发送请求后取消它,比如用户在请求还未完成时离开了当前页面或者执行了其他操作,本文将介绍如何在使用 Axios 发送请求时取消这些请求。
深入解析 Axios 取消请求:2 种方法助你掌握控制权
|
2月前
|
XML JSON 前端开发
ajax中get和post的区别,datatype返回的数据类型有哪些?web开发中数据提交的几种方式,有什么区别。百度使用哪种方式?
ajax中get和post的区别,datatype返回的数据类型有哪些?web开发中数据提交的几种方式,有什么区别。百度使用哪种方式?
32 0
|
11月前
|
前端开发
如何用ajax请求后台数据的两种全网最实用且详细的写法
如何用ajax请求后台数据的两种全网最实用且详细的写法
101 0