fsockopen 和 curl 之间哪个更好? [关闭]

Posted

技术标签:

【中文标题】fsockopen 和 curl 之间哪个更好? [关闭]【英文标题】:Which is better approach between fsockopen and curl? [closed] 【发布时间】:2011-08-21 11:29:46 【问题描述】:

我正在为自动定期计费创建一个应用程序。 请让我知道我应该选择哪个选项将请求发送到服务器

fsockeopen 卷曲

为什么一个比另一个更好?

【问题讨论】:

【参考方案1】:

都不是。我的意思是,不是直接的。

在裸机套接字上编写和解析 HTTP 标头是疯狂,我发现 curl 的 API 是彻头彻尾的冒犯

看看 PEAR 的HTTP_Request2,它甚至可能已经安装在您的机器上。如果没有,您可以将它与您的代码捆绑在一起——它是 BSD 许可的。它包装了either sockets or curl,并提供了一个相对健全的HTTP接口。

【讨论】:

【参考方案2】:

我建议将 php 的流上下文与内置函数一起使用:http://us3.php.net/manual/en/book.stream.php。完整的 HTTP/S 功能并与 fopen/file_get_contents 函数很好地集成。你可以(例如)做一个这样的 POST:

$chunk = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=".FACEBOOK_APP_ID."&client_secret=".FACEBOOK_SECRET."&grant_type=client_credentials");
if ($request_ids && $chunk) 
    $cookie = explode('=', $chunk);
    if (count($cookie) == 2) $cookie = $cookie[1];
    else $cookie = $cookie[0];

    // flush it
    foreach ($request_ids as $request_id) 
        $context = stream_context_create(array(
            'http' => array(
                'method'        => 'POST',
                'content'       => 'method=DELETE',
                'user_agent'    => "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729)",
                'max_redirects' => 0
            )
        ));
        @file_get_contents('https://graph.facebook.com/' . $request_id . '?access_token=' . $cookie, false, $context);
    

此代码登录 Facebook,获取应用登录令牌,然后使用安全 HTTP POST 使用图形 API 删除多个对象。

如果你需要做更高级的事情,你也可以。

$context = stream_context_create(array('http' => array(
   // set HTTP method
   'method'         => 'GET',
   'user_agent'     => "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729)",
   'max_redirects'  => 0
)));

// extract the cookies
$fp      = fopen(URL, "r", false, $context);
$meta    = stream_get_meta_data($fp);
$headers = $metadata['wrapper_data'];
fclose($fp);

Will log 将获取 URL 返回的标头。无需外部库。

【讨论】:

那么在allow_url_fopen为false的情况下怎么办?【参考方案3】:

当您必须处理 http 协议时使用 Curl,当您需要对非 http 服务器进行更通用的访问时使用套接字。

【讨论】:

【参考方案4】:

我现在正在研究这个问题,发现下面的页面提供了用于测试不同选项和生成速度输出的代码。很有意思。

http://www.hashbangcode.com/blog/quickest-way-download-web-page-php

【讨论】:

我真的很喜欢这里的方法,但它有一个严重的缺陷。测试的时间波动很大,严重到整个测量结果几乎没有用处。服务器响应时间、瞬时服务器延迟以及到服务器的路由的瞬时质量都在测试中发挥重要作用。我从测试中得出的真正结论是,它几乎与 HTTP 查询无关,因为随机的各种滞后是任何 API 性能差异的倍数。

以上是关于fsockopen 和 curl 之间哪个更好? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PHP 使用 fsockopen/cURL 设置浏览器代理

哪个更好,curl 还是 wget? [关闭]

如何让 SSL 在 fsockopen 中工作?

使用文件获取内容或 curl

PHP fsockopen() cookie

在 PHP 中进行 TELNET 的正确且快速的方法。套接字或 cURL