我正在使用 PHP 并从 web 解析 url 内容,我知道 file_get_contents(url) 和 curl 有两种方法。我知道我们对 curl 有更多选择,所以我正在使用它但我只是想知道 curl 背后的过程。当我们从头开始发出 curl 请求时它是如何工作的
3 回答
PHP cURL 包只是在 PHP 中公开了 cURL/libcurl API(用 C 编写)。cURL 对于跨各种协议移动数据非常有用,并且有很多不错的选择。另一方面,file_get_contents 是基本的 PHP 文件操作之一,它依赖于内核来尝试查找请求的资源。一般来说,cURL 将是一个更好的选择,尽管它通常需要多几行代码。file_get_contents() 的一个问题是,在某些情况下,在发出请求后连接保持打开状态,因此函数调用将阻塞脚本,直到请求超时,您可能会看到很多延迟。
参考:
http://php.net/manual/en/book.curl.php
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);
如需更多了解,请使用以下参考资料:
这可以帮助你。
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;
希望能帮助到你