使用PHP和curl或fopen获取Bing站长统计信息
我试图加载由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分析,并可能转储到数据库。如果我可以直接获取这些生成的页面的内容,而不是将它们保存到文件中,然后再读取它们,这将节省大量时间和精力。
它的工作,如果只使用
curl_setopt($ CH,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($ ch,CURLOPT_SSL_VERIFYHOST,0);
选项为卷曲,祝你好运
“是否有Bing的登录过程?”当我点击你的示例链接时,我得到一个,所以标志指向是。 – ceejayoz
是的,有。我在通过同一浏览器登录时运行脚本。 我也抛弃了证书,并通过卷曲指向它。不过,这一点似乎没有什么区别,这导致我认为存在Cookie依赖性(或Bing的人不喜欢以这种方式提取数据)。 – John
呃,在您的浏览器上登录有**没有任何**与PHP。他们完全和完全分离。地狱,即使Safari与Firefox使用完全不同的cookie。你需要编写登录程序的脚本,处理cURL中的cookies以备将来的请求等。 – ceejayoz