我正在尝试加载必应网站管理员工具生成的统计信息数据。我正在根据所需的数据构建网址并尝试加载它。由于 file_get_contents() 不适用于 https,因此我尝试了基于 curl 的函数和 fopen。
这是否可能,或者必应是否以某种方式阻止远程访问此数据流?我知道谷歌有一个登录过程,但我没有发现Bing这样的东西。相反,我使用 cURL 设置了一个证书,打开了 allow_url_fopen,并启用了 ssl。除了以下消息外,Var 转储和打印不会给我任何东西:
使用 fopen() 时:资源 (3) 类型(流)资源 ID #3
使用 getBingdata() 时:布尔值(假)
这是我的函数。其中大部分是从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;
}
我也尝试通过curl发送我的Bing网站管理员登录名和密码,但发现它没有区别。我需要与饼干有关吗?必应有登录过程吗?有没有更好的方法从https urls获取网络数据?还是必应中的所有内容都必须转储到文件中用于其他用途?
提前非常感谢!
附言。我正在使用 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);
卷曲选项,祝你好运