PHP中的cURL是什么?

在PHP中,我在许多PHP项目中都看到了cURL这个词。是什么?它是如何工作的?

参考链接:旋度

472998 次浏览

cURL是一种从代码中命中URL以获得html响应的方法。cURL的意思是客户端URL,它允许你与其他URL连接,并在你的代码中使用它们的响应。

旋度是一个允许你在PHP中进行HTTP请求的库。你需要知道的关于它(和大多数其他扩展)的一切都可以在PHP手册中找到。

为了使用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请求,尽管它需要在你的php.ini文件中启用allow_url_fopen

// Make a HTTP GET request and print it (requires allow_url_fopen to be enabled)
print file_get_contents('http://www.example.com/');

PHP中的cURL是使用PHP语言中的命令行cURL的桥梁

cURL扩展到PHP的目的是让你从你的PHP脚本中使用各种web资源。

CURL在PHP中:

简介:

PHP中的curl_exec命令是一个从控制台使用curl的桥。curl_exec可以轻松快速地执行GET/POST请求,接收来自其他服务器的响应,如JSON和下载文件。

警告,危险:

curl是邪恶和危险的,如果使用不当,因为它都是关于从互联网上获取数据。有人可以在你的curl和其他服务器之间,并在你的响应中注入rm -rf /,然后为什么我被丢弃到控制台,ls -l甚至不再工作了?因为你低估了卷发的危险力量。不要相信curl返回的任何内容是安全的,即使您正在与自己的服务器通信。你可以通过删除恶意软件来减少傻瓜的财富。

例子:

这些都是在Ubuntu 12.10上完成的

  1. < p > 命令行中的基本curl:

    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
    

    光荣的猫进化出弓形虫,让女人把猫留在身边,男人也把女人留在身边

  2. < p > cURL示例获取请求到google.com,回显到命令行:

    这是通过phpsh终端完成的:

    php> $ch = curl_init();
    
    
    php> curl_setopt($ch, CURLOPT_URL, 'http://www.google.com');
    
    
    php> curl_exec($ch);
    

    输出和转储一个混乱的压缩html和javascript(从谷歌)到控制台

  3. < p > 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,可能性是无限的

  4. < p > 在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执行GETPOST请求,你所要做的就是指定这里定义的参数:使用curl自动化HTTP作业

危险提示:

小心倾倒卷曲输出,如果其中任何一个被解释和执行,你的盒子被拥有,你的信用卡信息将被卖给第三方,你会从阿拉巴马州的一个人地板公司那里得到900美元的神秘费用,这个公司是海外信用卡欺诈犯罪团伙的前线。

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()初始化curl会话。

步骤2:设置CURLOPT_URL的选项。这个值就是我们将请求发送到的URL。使用参数q=追加搜索词curl。设置CURLOPT_RETURNTRANSFER选项。True会告诉curl返回字符串,而不是打印出来。为CURLOPT_HEADER设置选项,false将告诉curl忽略返回值中的报头。

步骤3:使用curl_exec()执行curl会话。

步骤4:关闭我们创建的curl会话。

步骤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;
}

这也用于身份验证。我们还可以设置用户名和密码进行身份验证。

要了解更多功能,请参阅用户手册或以下教程:

< p > http://php.net/manual/en/ref.curl.php < br > http://www.startutorial.com/articles/view/php-curl < / p >

旋度

  • cURL是一种从代码中命中URL以从中获得HTML响应的方法。
  • 它用于PHP语言的命令行cURL。
  • cURL是一个允许您在PHP中发出HTTP请求的库。

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);
}

如需更多信息,请查看-

首先让我们了解curl、libcurl和PHP/ curl的概念。

  1. curl:使用URL语法获取或发送文件的命令行工具。

  2. libcurl:由Daniel Stenberg创建的库,允许您使用许多不同类型的协议连接和通信到许多不同类型的服务器。Libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl还支持HTTPS证书、HTTP POST、HTTP PUT、FTP上传(这也可以用PHP的FTP扩展完成)、基于HTTP表单的上传、代理、cookie和用户+密码身份验证。

  3. PHP/cURL: PHP模块,使PHP程序可以使用libcurl。

如何使用:

step1:使用curl_init()初始化curl会话。

步骤2:设置CURLOPT_URL选项。这个值就是我们将请求发送到的URL。使用参数“q=”附加搜索词“curl”。设置选项CURLOPT_RETURNTRANSFER, true将告诉curl返回字符串而不是打印出来。设置CURLOPT_HEADER的选项,false将告诉curl忽略返回值中的报头。

步骤3:使用curl_exec()执行curl会话。

第四:关闭我们创建的curl会话。

顾不上:输出返回字符串。

做演示:

您需要创建两个PHP文件,并将它们放入web服务器可以从中提供PHP文件的文件夹中。在我的例子中,为了简单起见,我将它们放在/var/www/中。

1. helloservice.php2. 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 )
?>

Php curl类(GET,POST,文件上传,会话,发送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());
?>

Php curl函数(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;
}