mjj520 发表于 2012-6-2 09:14
唉 cpu超级耗芸豆的
查了下开发文档,fetchurl原来是不算CPU的,是我误导了你们。
php
这里稍微说明,$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,你懂的。
- 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));
- $f->setCookies($cookies);
- $content=$f->fetch($url);
- $cookies=mkcookies($cookies,$f->responseCookies());
- file_put_contents($cookies_file,serialize($cookies));
- $headers=$f->responseHeaders();
- $location=$headers['Location'];
- if($location<>''){
- $url=$location;
- $content=new_fetch($url,'',$cookies_file);
- }
- return $content;
- }
再附上mkcookies的函数,也很无奈,fetchurl的responseCookies也太坑爹了,就算参数设置FALSE都仍是不认识什么是COOKIE,返回些垃圾,只要从新处理下,而且模拟下浏览器对cookie的操做。
- function mkcookies($cookies,$newcookies){
- foreach($newcookies as $cookie){
- foreach($cookie as $key=>$value){
- $cookies[$key]=$value;
- break;
- }
- }
- return $cookies;
- }
以上表述不专业,请各位童鞋指教。
|
|
|