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;
- }
以上表述不專業,請各位童鞋指教。
|
|
|