我正在使用PHP并解析来自web的url内容,我知道有两种方法可用于file_get_contents(url)和curl。我知道我们有更多选择卷曲所以我正在使用但我只是想知道卷曲背后的过程。当我们简短地提出一个卷曲请求时它是如何工作的
答案 0 :(得分: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
答案 1 :(得分: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);
如需更多理解,请使用以下参考文献:
答案 2 :(得分: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将包含您的卷曲请求正文
或者如果你想沿着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;
希望有所帮助