2012-06-20 43 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);

选项为卷曲,祝你好运