在PHP中,我在许多PHP项目中看到了单词cURL。它是什么?它是如何工作的?
参考链接:cURL
答案 0 :(得分:228)
cURL是一个允许您在PHP中发出HTTP请求的库。您需要了解的所有内容(以及大多数其他扩展程序)都可以在PHP manual中找到。
为了使用PHP的cURL函数 你需要安装»libcurl 包。 PHP要求您使用 libcurl 7.0.2-beta或更高版本。在PHP中 4.2.3,您将需要libcurl版本7.9.0或更高版本。从PHP 4.3.0开始,您将需要一个libcurl版本 7.9.8或更高。 PHP 5.0.0需要libcurl版本7.10.5或更高版本。
您也可以在没有cURL的情况下发出HTTP请求,但需要在allow_url_fopen
文件中启用php.ini
。
// Make a HTTP GET request and print it (requires allow_url_fopen to be enabled)
print file_get_contents('http://www.example.com/');
答案 1 :(得分:151)
cURL是一种可以从代码中获取URL以获取html响应的方法。 cURL表示客户端URL,允许您与其他URL连接并在代码中使用其响应。
答案 2 :(得分:64)
<强>要点:强>
PHP中的curl_exec
命令是从控制台使用curl
的桥梁。 curl_exec可以轻松快速轻松地执行GET / POST请求,接收来自其他服务器(如JSON)和下载文件的响应。
警告,危险:
如果使用不当, curl
是邪恶和危险的,因为它只是从互联网上获取数据。有人可以介入你的curl和其他服务器之间,并在你的响应中注入一个rm -rf /
,然后我为什么要放到一个控制台,ls -l
甚至不再工作了?因为你错误地低估了卷曲的危险力量。即使您正在与自己的服务器通信,也不要相信从卷曲中回来的任何东西都是安全的。你可能会撤回恶意软件以减轻他们财富的愚蠢。
这些是在Ubuntu 12.10上完成的。
来自命令行的基本卷曲:
el@apollo:/home/el$ curl http://i.imgur.com/4rBHtSm.gif > mycat.gif
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 492k 100 492k 0 0 1077k 0 --:--:-- --:--:-- --:--:-- 1240k
然后你可以在firefox中打开你的gif:
firefox mycat.gif
光荣的猫进化弓形虫,使女性养猫,男性同样可以让女性保持身边。
cURL示例获取请求到google.com,回到命令行:
这是通过phpsh终端完成的:
php> $ch = curl_init();
php> curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
php> curl_exec($ch);
打印并将一堆浓缩的html和javascript(从谷歌)转储到控制台。
cURL示例将响应文本放入变量:
这是通过phpsh终端完成的:
php> $ch = curl_init();
php> curl_setopt($ch, CURLOPT_URL, 'http://i.imgur.com/wtQ6yZR.gif');
php> curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
php> $contents = curl_exec($ch);
php> echo $contents;
该变量现在包含二进制文件,它是猫的动画GIF,可能性是无限的。
从PHP文件中执行curl:
将此代码放在名为myphp.php的文件中:
<?php
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,'http://www.google.com');
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
if (empty($buffer)){
print "Nothing returned from url.<p>";
}
else{
print $buffer;
}
?>
然后通过命令行运行:
php < myphp.php
你运行myphp.php并通过php解释器执行这些命令,并将大量凌乱的html和javascript转储到屏幕上。
您可以使用curl执行GET
和POST
个请求,您只需指定此处定义的参数: Using curl to automate HTTP jobs
提醒危险:
小心倾倒卷曲输出,如果任何一个被解释并执行,你的盒子是拥有的,你的信用卡信息将出售给第三方,你将从阿拉巴马州单人地板收取神秘的900美元费用该公司是海外信用卡诈骗犯罪的前沿。
答案 3 :(得分:20)
cURL是一种可以从代码中获取URL以从中获取HTML响应的方法。它用于PHP语言的命令行cURL。
<?php
// Step 1
$cSession = curl_init();
// Step 2
curl_setopt($cSession,CURLOPT_URL,"http://www.google.com/search?q=curl");
curl_setopt($cSession,CURLOPT_RETURNTRANSFER,true);
curl_setopt($cSession,CURLOPT_HEADER, false);
// Step 3
$result=curl_exec($cSession);
// Step 4
curl_close($cSession);
// Step 5
echo $result;
?>
步骤1:使用curl_init()
初始化卷曲会话。
第2步:为CURLOPT_URL
设置选项。此值是我们向其发送请求的URL。使用参数curl
附加搜索字词q=
。设置CURLOPT_RETURNTRANSFER
的选项。 True将告诉curl返回字符串而不是打印出来。设置CURLOPT_HEADER
的选项,false将告诉curl忽略返回值中的标题。
步骤3:使用curl_exec()
执行卷曲会话。
第4步:关闭我们创建的卷曲会话。
步骤5:输出返回字符串。
public function curlCall($apiurl, $auth, $rflag)
{
$ch = curl_init($apiurl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if($auth == 'auth') {
curl_setopt($ch, CURLOPT_USERPWD, "passw:passw");
} else {
curl_setopt($ch, CURLOPT_USERPWD, "ss:ss1");
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$dt = curl_exec($ch);
curl_close($ch);
if($rflag != 1) {
$dt = json_decode($dt,true);
}
return $dt;
}
这也用于身份验证。我们还可以设置用于身份验证的用户名和密码。
有关更多功能,请参阅用户手册或以下教程:
http://php.net/manual/en/ref.curl.php
http://www.startutorial.com/articles/view/php-curl
答案 4 :(得分:14)
首先让我们了解curl,libcurl和PHP / cURL的概念。
curl :使用网址语法获取或发送文件的命令行工具。
libcurl :由Daniel Stenberg创建的库,允许您使用许多不同类型的协议连接并与许多不同类型的服务器通信。 libcurl目前支持http,https,ftp,gopher,telnet,dict,file和ldap协议。 libcurl还支持HTTPS证书,HTTP POST,HTTP PUT,FTP上传(也可以使用PHP的ftp扩展),基于HTTP表单的上传,代理,cookie和用户+密码验证。
PHP / cURL :PHP模块,使PHP程序可以使用libcurl。
如何使用它:
step1 :使用curl_init()初始化卷曲会话。
step2 :为CURLOPT_URL设置选项。这个值是我们发送请求的URL。使用参数“q =”添加搜索词“curl”。设置选项CURLOPT_RETURNTRANSFER,true将告诉curl返回字符串而不是将其打印出来。为CURLOPT_HEADER设置选项,false将告诉curl忽略返回值中的标题。
step3 :使用curl_exec()执行curl会话。
step4 :关闭我们创建的卷曲会话。
step5 :输出返回字符串。
制作演示:
您需要创建两个PHP文件并将它们放入您的Web服务器可以从中提供PHP文件的文件夹中。在我的情况下,我将它们放入/ var / www /中以简化。
<强> 1。 helloservice.php 和 2。 demo.php 强>
helloservice.php非常简单,基本上只是回传它获得的任何数据:
<?php
// Here is the data we will be sending to the service
$some_data = array(
'message' => 'Hello World',
'name' => 'Anand'
);
$curl = curl_init();
// You can also set the URL you want to communicate with by doing this:
// $curl = curl_init('http://localhost/echoservice');
// We POST the data
curl_setopt($curl, CURLOPT_POST, 1);
// Set the url path we want to call
curl_setopt($curl, CURLOPT_URL, 'http://localhost/demo.php');
// Make it so the data coming back is put into a string
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Insert the data
curl_setopt($curl, CURLOPT_POSTFIELDS, $some_data);
// You can also bunch the above commands into an array if you choose using: curl_setopt_array
// Send the request
$result = curl_exec($curl);
// Get some cURL session information back
$info = curl_getinfo($curl);
echo 'content type: ' . $info['content_type'] . '<br />';
echo 'http code: ' . $info['http_code'] . '<br />';
// Free up the resources $curl is using
curl_close($curl);
echo $result;
?>
2.demo.php 页面,您可以看到结果:
<?php
print_r($_POST);
//content type: text/html; charset=UTF-8
//http code: 200
//Array ( [message] => Hello World [name] => Anand )
?>
答案 5 :(得分:12)
PHP的cURL扩展旨在允许您在PHP脚本中使用各种Web资源。
答案 6 :(得分:10)
PHP中的cURL是使用php语言的命令行cURL的桥梁
答案 7 :(得分:6)
PHP支持libcurl,这是一个由Daniel Stenberg创建的库,它允许您使用许多不同类型的协议连接和通信到许多不同类型的服务器。 libcurl目前支持http,https,ftp,gopher,telnet,dict,file和ldap协议。 libcurl还支持HTTPS证书,HTTP POST,HTTP PUT,FTP上传(这也可以通过PHP的ftp扩展),基于HTTP表单的上传,代理,cookie和用户+密码验证。
一旦您使用cURL支持编译PHP,就可以开始使用cURL函数了。 cURL函数背后的基本思想是使用curl_init()初始化cURL会话,然后你可以通过curl_setopt()设置所有传输选项,然后你可以用curl_exec()执行会话然后你使用curl_close()完成你的会话。
// error reporting
error_reporting(E_ALL);
ini_set("display_errors", 1);
//setting url
$url = 'http://example.com/api';
//data
$data = array("message" => "Hello World!!!");
try {
$ch = curl_init($url);
$data_string = json_encode($data);
if (FALSE === $ch)
throw new Exception('failed to initialize');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)));
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$output = curl_exec($ch);
if (FALSE === $output)
throw new Exception(curl_error($ch), curl_errno($ch));
// ...process $output now
} catch(Exception $e) {
trigger_error(sprintf(
'Curl failed with error #%d: %s',
$e->getCode(), $e->getMessage()),
E_USER_ERROR);
}
答案 8 :(得分:1)
Curl只是PHP的扩展,它继承了普通curl命令和行为的行为。主要为Linux / Unix命令行工具编写的库
什么是卷曲? cURL代表客户端URL。 cURL用于将数据发送到任何URL。有关卷曲究竟是什么的更多细节,您可以访问CURL Website
PHP中的cURL 现在,PHP中引入了相同的概念,通过不同的协议(例如HTTP或FTP)将数据发送到任何可访问的URL。有关详细信息,请参阅PHP Curl Tutorial
答案 9 :(得分:0)
Php curl类(获取,发布,文件上传,会话,发送POST JSON,强制自签名SSL / TLS):
<?php
// Php curl class
class Curl {
public $error;
function __construct() {}
function Get($url = "http://hostname.x/api.php?q=jabadoo&txt=gin", $forceSsl = false,$cookie = "", $session = true){
// $url = $url . "?". http_build_query($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
$info = curl_getinfo($ch);
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
function GetArray($url = "http://hostname.x/api.php", $data = array("name" => "Max", "age" => "36"), $forceSsl = false, $cookie = "", $session = true){
$url = $url . "?". http_build_query($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
$info = curl_getinfo($ch);
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
function PostJson($url = "http://hostname.x/api.php", $data = array("name" => "Max", "age" => "36"), $forceSsl = false, $cookie = "", $session = true){
$data = json_encode($data);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer helo29dasd8asd6asnav7ffa',
'Content-Type: application/json',
'Content-Length: ' . strlen($data))
);
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
function Post($url = "http://hostname.x/api.php", $data = array("name" => "Max", "age" => "36"), $files = array('ads/ads0.jpg', 'ads/ads1.jpg'), $forceSsl = false, $cookie = "", $session = true){
foreach ($files as $k => $v) {
$f = realpath($v);
if(file_exists($f)){
$fc = new CurlFile($f, mime_content_type($f), basename($f));
$data["file[".$k."]"] = $fc;
}
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); // !!!! required as of PHP 5.6.0 for files !!!
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)");
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if($session){
curl_setopt($ch, CURLOPT_COOKIESESSION, true );
curl_setopt($ch , CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch , CURLOPT_COOKIEFILE, 'cookies.txt');
}
if($forceSsl){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // 1, 2
}
if(!empty($cookie)){
curl_setopt($ch, CURLOPT_COOKIE, $cookie); // "token=12345"
}
$res = curl_exec($ch);
if (curl_error($ch)) {
$this->error = curl_error($ch);
throw new Exception($this->error);
}else{
curl_close($ch);
return $res;
}
}
}
?>
示例:
<?php
$urlget = "http://hostname.x/api.php?id=123&user=bax";
$url = "http://hostname.x/api.php";
$data = array("name" => "Max", "age" => "36");
$files = array('ads/ads0.jpg', 'ads/ads1.jpg');
$curl = new Curl();
echo $curl->Get($urlget, true, "token=12345");
echo $curl->GetArray($url, $data, true);
echo $curl->Post($url, $data, $files, true);
echo $curl->PostJson($url, $data, true);
?>
Php文件:api.php
<?php
/*
$Cookie = session_get_cookie_params();
print_r($Cookie);
*/
session_set_cookie_params(9000, '/', 'hostname.x', isset($_SERVER["HTTPS"]), true);
session_start();
$_SESSION['cnt']++;
echo "Session count: " . $_SESSION['cnt']. "\r\n";
echo $json = file_get_contents('php://input');
$arr = json_decode($json, true);
echo "<pre>";
if(!empty($json)){ print_r($arr); }
if(!empty($_GET)){ print_r($_GET); }
if(!empty($_POST)){ print_r($_POST); }
if(!empty($_FILES)){ print_r($_FILES); }
// request headers
print_r(getallheaders());
print_r(apache_response_headers());
// Fetch a list of headers to be sent.
// print_r(headers_list());
?>
答案 10 :(得分:0)
Php卷曲功能(POST,GET,DELETE,PUT)
function curl($post = array(), $url, $token = '', $method = "POST", $json = false, $ssl = true){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
if($method == 'POST'){
curl_setopt($ch, CURLOPT_POST, 1);
}
if($json == true){
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json','Authorization: Bearer '.$token,'Content-Length: ' . strlen($post)));
}else{
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
if($ssl == false){
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
// curl_setopt($ch, CURLOPT_HEADER, 0);
$r = curl_exec($ch);
if (curl_error($ch)) {
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$err = curl_error($ch);
print_r('Error: ' . $err . ' Status: ' . $statusCode);
// Add error
$this->error = $err;
}
curl_close($ch);
return $r;
}