4

我正在使用 PHP 并从 web 解析 url 内容,我知道 file_get_contents(url) 和 curl 有两种方法。我知道我们对 curl 有更多选择,所以我正在使用它但我只是想知道 curl 背后的过程。当我们从头开始发出 curl 请求时它是如何工作的

4

3 回答 3

4

PHP cURL 包只是在 PHP 中公开了 cURL/libcurl API(用 C 编写)。cURL 对于跨各种协议移动数据非常有用,并且有很多不错的选择。另一方面,file_get_contents 是基本的 PHP 文件操作之一,它依赖于内核来尝试查找请求的资源。一般来说,cURL 将是一个更好的选择,尽管它通常需要多几行代码。file_get_contents() 的一个问题是,在某些情况下,在发出请求后连接保持打开状态,因此函数调用将阻塞脚本,直到请求超时,您可能会看到很多延迟。

参考:

http://php.net/manual/en/book.curl.php

http://en.wikipedia.org/wiki/CURL

http://www.php.net/manual/en/ref.filesystem.php

于 2012-09-06T06:05:13.473 回答
3

curl是使用任何支持的协议(HTTP、HTTPS、FTP、GOPHER、DICT、TELNET、LDAP 或 FILE)从服务器获取文档/文件或将文档发送到服务器的客户端。该命令旨在无需用户交互或任何类型的交互性即可工作。

curl提供了大量有用的技巧,例如代理支持、用户身份验证、ftp 上传、HTTP 发布、SSL (https:) 连接、cookie、文件传输恢复等。

例子:

//set POST variables
$url = 'http://domain.com/get-post.php';
$fields = array(
            'lname'=>urlencode($last_name),
            'fname'=>urlencode($first_name),
            'title'=>urlencode($title),
            'company'=>urlencode($institution),
            'age'=>urlencode($age),
            'email'=>urlencode($email),
            'phone'=>urlencode($phone)
        );

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

如需更多了解,请使用以下参考资料:

  1. 带例子的卷曲介绍

  2. 使用 cURL 自动化 HTTP 作业

  3. 卷曲的例子

这可以帮助你。

于 2012-09-06T06:03:06.233 回答
1

Curl 基本上用于发出 REST 请求。

这是使用 curl 发布请求的简单示例

        $curl_handle=curl_init();
        curl_setopt($curl_handle,CURLOPT_URL,$GLOBAL_SMS_URL);
        curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,20);
        curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
        $buffer = curl_exec($curl_handle);
        curl_close($curl_handle);
        $getit =  json_decode($buffer, true);

现在代码的第一行用于初始化第二行中的 curl,我们正在定义远程 URL $GLOBAL_SMS_URL(在我的情况下)

第三行我以秒为单位定义超时

我在第 4 行传递标题

一件重要的事情,如果你想通过卷曲体使用这个

 curl_setopt($curl_handle, CURLOPT_POSTFIELDS,$json);

其中 $json 将包含您的 curl 请求正文

或者如果你想通过 url 传递一些参数

        $data = array(
                "Username" => "56y5768",
                "Pwd" => "tr54656y",
                "PhoneNumber" => $phone,
                "PhoneMessage" => $text
        );
        $getdata =  http_build_query($data) . "\n";
        $GLOBAL_SMS_URL = $SMS_API_BASE_URL.$getdata;

希望能帮助到你

于 2012-09-06T06:08:27.923 回答