【问题标题】:PHP curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) too slowPHP curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) 太慢了
【发布时间】:2011-06-12 20:16:53
【问题描述】:

我使用这种方法来获取 facebook api 数据。只是一个搜索查询。但我发现在curl 时间内使用curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 会花费更多时间(超过10 秒以上)。

还有其他的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,因为我在本地主机测试中设置SDK 失败。虽然我已经阅读了很多关于如何在 localhost 中设置的文章。我已将http://127.0.0.1/facebook 设置为我的回调网址。但只是失败了。所以我还是想得到一个简单的卷曲方式。

谢谢。

【问题讨论】:

    标签: php facebook curl


    【解决方案1】:

    您可以使用 .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) 才能正常工作。有关如何导出证书的更详细指南,请访问提供的链接。

    【讨论】:

    • 这不会在证书更改时造成麻烦吗?
    • 事实上,如果证书签名发生变化,这应该会造成麻烦,这就是 SSL 连接的重点,以避免有人替换 URL。
    • 我的意思是,当 Facebook 因为它已过期而替换它时。例如,当前证书将在 2013 年 12 月之前被替换。
    • 在链接中,解释了如何获取顶级实体的证书。当那个到期时,是的,它需要更新。为此,您可以设置每周或每月执行的 cron。
    • @Lumbendil,没用,我按照文章从https://graph.facebook.com/... 下载了文件,然后保存在与我的 php 文件相同的文件夹中。 curl_setopt($ch, CURLOPT_CAINFO, 'file.crt');curl_setopt($ch, CURLOPT_CAINFO, '/file.crt'); 或返回 Warning: Invalid argument supplied for foreach()
    【解决方案2】:

    如果忽略检查证书需要 10 秒,则问题不在于证书或检查,坦率地说,可能根本不在于 SSL。

    与 SSL 握手过程的其余部分花费的时间相比,忽略检查证书应该非常快且不可测量。

    要正确追踪问题,我建议您使用 curl 命令行工具及其 --trace-ascii--trace-time 选项来查看似乎需要时间的内容。您可能需要使用 wireshark 或类似工具来窥探网络,以便更好地了解正在发生的事情。

    我看不出其他添加证书检查的建议如何让任何事情变得更快。

    【讨论】:

    • 您自己尝试过图形搜索吗?我正在慢慢地迷惑我。不知道是localhost造成的慢还是移到真实服务器会跑得更快。
    • 我是 libcurl 的维护者和首席开发者,我在很多情况下(尽管不是 PHP)都使用过 curl,但我从来没有遇到过这种奇怪的情况。
    【解决方案3】:

    只是附带说明,但如果您确实希望使用 SDK,您可以通过编辑主机文件并为 127.0.0.1 添加 localhost.local 来解决本地问题。 /etc/hosts 在 linux 机器上和 C:\WINDOWS\system32\drivers\etc\hosts 在 windows 机器上。

    然后在 Facebook 应用程序设置中,只需将 localhost.local 设置为您的域并相应地设置您的站点 url。

    你应该准备好了。

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 2018-04-16
      • 2011-09-22
      • 2013-09-29
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多