我使用此方法获取facebook api数据。只是一个搜索查询。但我发现在curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
时间(超过10秒)内使用curl
会花费更多时间。
是否有其他curl
方法可以更快地运行?
注意:我现在正在localhost中进行测试
$url = "https://graph.facebook.com/search?access_token=".$token."&q=dallas&type=post&scope=publish_stream,offline_access,user_status,read_stream";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 2);
//curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__). '/file.crt'); the way as Lumbendil recommend, download a crt file via firefox. still slowly.
$body= curl_exec($ch);
curl_close ($ch);
PS:我不想使用SDK
,因为我在localhost测试中设置SDK
失败了。虽然我已经阅读了很多关于如何在localhost中设置的文章。我已将http://127.0.0.1/facebook
设置为我的回调网址。但是失败了。所以我仍然想要一个简单的卷曲方式。
感谢。
答案 0 :(得分:9)
您可以使用.crt文件并对其进行验证,而不是忽略SSL验证,as explained here。
要将所有信息保存在一个位置:在代码中,您应该写下以下内容:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/crt/file.crt');
要获取证书,您应该使用浏览器访问该页面,然后使用“查看证书”您必须将其导出。请记住,您必须将其导出为 X.509证书(PEM)才能生效。有关如何导出证书的更详细指南,请访问提供的链接。
答案 1 :(得分:2)
如果忽略检查证书需要10秒钟,问题不在于证书或检查,而且坦率地说,它可能根本不是SSL。
忽略检查证书应该非常快,并且与SSL握手过程的其余部分相比需要多长时间才能进行测量。
要正确追踪问题,我建议您使用curl命令行工具及其--trace-ascii和--trace-time选项来查看似乎需要花费时间的内容。您可能需要使用wireshark或类似网络窥探网络,以更好地了解正在发生的事情。
我无法看到添加证书检查的其他建议如何更快地发挥作用。
答案 2 :(得分:0)
只是旁注,但如果您确实希望使用SDK,则可以通过编辑hosts文件并为127.0.0.1添加localhost.local来解决本地问题。 Linux机器上的/ etc / hosts和Windows机器上的C:\ WINDOWS \ system32 \ drivers \ etc \ hosts。
然后在Facebook应用设置中,只需将localhost.local设置为您的域并相应地设置您的网站网址。
你应该准备好了。