zoukankan      html  css  js  c++  java
  • 【转】重新封装FetchUrl函数一枚,支持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. }
    以上表述不专业,请各位童鞋指教。


     
     
  • 相关阅读:
    LeetCode(287)Find the Duplicate Number
    LeetCode(290) Word Pattern
    LeetCode(205)Isomorphic Strings
    LeetCode(201) Bitwise AND of Numbers Range
    LeetCode(200) Number of Islands
    LeetCode(220) Contains Duplicate III
    LeetCode(219) Contains Duplicate II
    命令行执行Qt程序
    LeetCode(228) Summary Ranges
    redis 的安装和使用记录
  • 原文地址:https://www.cnblogs.com/SummerRain/p/3665271.html
Copyright © 2011-2022 走看看