【问题标题】:Any alternative to curl_exec()?curl_exec() 的任何替代方法?
【发布时间】:2011-09-03 15:30:11
【问题描述】:

我正在尝试制作一种许可证检查脚本,但由于并非所有主机都允许curl_exec,我想知道是否有其他方法可以进行回调?

这就是我使用 curl 的方式:

curl_setopt($ch, CURLOPT_URL, $url."/my_script.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $info);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);

【问题讨论】:

    标签: php post curl licensing callback


    【解决方案1】:

    您可以简单地将 file_get_contents() 与 URL 一起使用:

    file_get_contents('http://www.google.com');
    

    不过,这可能会被禁用,只需一个简单的 INI 选项 allow_url_fopen

    或者,您可以使用fsockopen(),它应该在大多数系统上都可用。

    使用fsockopen(),您可以打开一个到HTTP 服务器的套接字,然后使用标准fwrite()fread() 进行通信。缺点是必须自己编写 HTTP 请求头,还必须解析 HTTP 响应头。如果您查看 PHP 手册中的 fsockopen(),您会看到很多示例:http://fr2.php.net/fsockopen

    我的建议是使用 cURL 作为主要选项,使用 file_get_contents() 作为次要选项(如果 ini_get('allow_url_fopen') 返回肯定结果)并实施像 fsockopen() 这样的解决方案作为后备选项。

    【讨论】:

    • 干杯!我会看看我是否能够做到我想要的:)。
    • 看看我写的这段代码:pastie.org/2476499 它已经很老了(Finder 可以追溯到 2007 年),所以您可能需要调整它,例如删除 @ 并使用其他错误报告方式,例如异常(在 2007 年,包括我在内的每个人都曾经以不同的方式编写 PHP 代码 :)。但是您可能会想到......最终编写 HTTP 标头并不难:en.wikipedia.org/wiki/HTTP#Example_session
    • 非常感谢!赞赏:)
    【解决方案2】:

    你可以切换curl_multi_exec,但这可能也被禁用了。

    或者,使用HTTP stream wrapper。要配置 POST 请求,您需要设置自己的 HTTP context

    【讨论】:

    • 我对 HTTP 流包装器或 HTTP 上下文一无所知,通常是否可以像常规共享托管服务提供商一样使用它?感谢您的快速回复!
    • @MrE 默认情况下启用它,因此它应该在必须的托管服务提供商上可用。但是,请记住,出于安全原因禁用 curl 的偏执的托管服务提供商几乎肯定也会禁用流包装器。
    • 非常感谢您的帮助:)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多