2012-06-20 42 views
0

我試圖加載由Bing網站管理員工具生成的統計數據。我正在根據所需的數據構建網址並嘗試加載該網址。由於file_get_contents()不適用於https,我已經嘗試了基於curl的函數和fopen。使用PHP和curl或fopen獲取Bing站長統計信息

這是否可能,或者Bing以某種方式阻止這個數據流被遠程訪問?我知道Google有一個登錄過程,但我沒有發現Bing的這種東西。相反,我用cURL設置了一個證書,打開了allow_url_fopen,並啓用了ssl。瓦爾轉儲和打印給我什麼,除了以下消息:

當使用fopen()函數: 資源(3)式的(流) 資源ID#3使用getBingdata時

(): 布爾(false)

這是我的功能。這些大部分都是從SO和其他地方的教程拼湊在一起的。我提前道歉對任何巨大的錯誤或遺漏

function getBingData($url) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 

    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); // 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 

    // goes to Bing login page if set to false 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_ENCODING, true); 

    if(substr($url,0,4)=='http') { $temp = parse_url($url); } 
    else if(substr($url,0,5)=='https') { $temp = parse_url($url); } 
    else { $temp = parse_url('https://'.$url); } 

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 0, 1, and 2 make no difference 
    curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "./certificates/ssl.bing.com.cer"); 
    curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "./certificates/wmstat.bing.com.cer"); 

    $result = curl_exec($ch); 
    $info = curl_getinfo($ch); 
    curl_close($ch); 
    return ($info['http_code']!=200) ? false : $result; 
} 

我也試圖通過捲曲送我冰網站管理員登錄名和密碼,卻發現它並沒有區別。我需要用cookies來做些什麼嗎?是否有Bing的登錄過程?是否有更好的方法從https網址獲取網絡數據?或者,Bing的所有內容都必須被轉儲到其他用途的文件中?

非常感謝提前!

ps。我使用https://wmstat.bing.com/webmaster/data.ashx?wmkt=en-CA&wlang=en-CA&type=sitelinks&url=CLIENTURLGOESHERE&out=plain給出的輸出,我知道它可以設置爲文件(csv格式)或從瀏覽器保存。不過,我需要動態加載的所有或各種部分進行SEO分析,並可能轉儲到數據庫。如果我可以直接獲取這些生成的頁面的內容,而不是將它們保存到文件中,然後再讀取它們,這將節省大量時間和精力。

+0

「是否有Bing的登錄過程?」當我點擊你的示例鏈接時,我得到一個,所以標誌指向是。 – ceejayoz

+0

是的,有。我在通過同一瀏覽器登錄時運行腳本。 我也拋棄了證書,並通過捲曲指向它。不過,這一點似乎沒有什麼區別,這導致我認爲存在Cookie依賴性(或Bing的人不喜歡以這種方式提取數據)。 – John

+0

呃,在您的瀏覽器上登錄有**沒有任何**與PHP。他們完全和完全分離。地獄,即使Safari與Firefox使用完全不同的cookie。你需要編寫登錄程序的腳本,處理cURL中的cookies以備將來的請求等。 – ceejayoz

回答

0

它的工作,如果只使用

curl_setopt($ CH,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($ ch,CURLOPT_SSL_VERIFYHOST,0);

選項爲捲曲,祝你好運