web-dev-qa-db-fra.com

Qu'est-ce que cURL en PHP?

En PHP, je vois le mot cURL dans de nombreux projets PHP. Qu'Est-ce que c'est? Comment ça marche?

Lien de référence: ( Qu'est-ce que cURL en PHP? )

203

cURL est une bibliothèque qui vous permet de faire des requêtes HTTP en PHP. Tout ce que vous devez savoir à ce sujet (et la plupart des autres extensions) se trouve dans le manuel PHP .

Afin d'utiliser les fonctions cURL de PHP vous devez installer le fichier »libcurl paquet. PHP nécessite que vous utilisiez libcurl 7.0.2-beta ou supérieur. En PHP 4.2.3, vous aurez besoin de libcurl version 7.9.0 ou supérieure. À partir de PHP 4.3.0, vous aurez besoin d’une version de libcurl qui soit 7.9.8 ou supérieur. PHP 5.0.0 nécessite une version de libcurl 7.10.5 ou supérieure.

Vous pouvez également effectuer des requêtes HTTP sans cURL, même si cela nécessite l'activation de allow_url_fopen dans votre fichier 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/');
223
Johannes Gorset

cURL est un moyen de frapper une URL de votre code pour obtenir une réponse HTML. cURL désigne l'URL du client qui vous permet de vous connecter à d'autres URL et d'utiliser leurs réponses dans votre code.

146
sushil bharwani

CURL en PHP:

Résumé:

La commande curl_exec dans PHP est un pont pour utiliser curl à partir de la console. curl_exec facilite les requêtes GET/POST, les réponses d’autres serveurs comme JSON et les fichiers téléchargés.

Avertissement, Danger:

curl est pervers et dangereux s’il est utilisé à mauvais escient, car il s’agit avant tout de récupérer des données sur Internet. Quelqu'un peut se placer entre votre serveur curl et l’autre serveur et injecter un rm -rf / dans votre réponse, puis pourquoi suis-je renvoyé à une console et ls -l ne fonctionne même plus? Parce que vous avez sous-estimé le dangereux pouvoir de curl. Ne faites pas confiance à tout ce qui revient de curl pour être en sécurité, même si vous parlez à vos propres serveurs. Vous pouvez supprimer les logiciels malveillants pour libérer les imbéciles de leur richesse. 

Exemples:

Celles-ci ont été faites sur Ubuntu 12.10

  1. Basic curl depuis la ligne de commande:

    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
    

    Ensuite, vous pouvez ouvrir votre gif dans Firefox:

    firefox mycat.gif
    

    Des chats glorieux développant Toxoplasma gondii pour amener les femmes à garder les chats et les hommes, de même que les hommes.

  2. cURL, par exemple, demande de frappe sur google.com, renvoie à la ligne de commande:

    Cela se fait via le terminal phpsh:

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

    Ce qui imprime et dépose un fouillis de HTML condensé et de javascript (à partir de Google) sur la console.

  3. cURL exemple place le texte de la réponse dans une variable:

    Cela se fait via le terminal 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;
    

    La variable contient maintenant le binaire qui est un gif animé d'un chat, les possibilités sont infinies.

  4. Faites un curl depuis un fichier PHP:

    Placez ce code dans un fichier nommé 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;
      }
    ?>
    

    Puis exécutez-le via la ligne de commande:

    php < myphp.php
    

    Vous avez exécuté myphp.php et exécuté ces commandes via l'interpréteur php. Vous avez transféré une tonne de codes HTML et javascript désordonnés à l'écran. 

    Vous pouvez faire des requêtes GET et POST avec curl, il vous suffit de spécifier les paramètres tels que définis ici: http://curl.haxx.se/docs/httpscripting.html#POST

Rappel du danger:

Faites attention à ne pas perdre votre sortie, si une partie de celle-ci est interprétée et exécutée, votre boîte est la propriété de votre entreprise et les informations relatives à votre carte de crédit seront vendues à des tiers. Vous obtiendrez ainsi une mystérieuse somme de 900 $ avant pour la bague de la fraude de carte de crédit à l'étranger.

60
Eric Leschinski

cURL est un moyen de frapper une URL de votre code pour obtenir une réponse HTML. Il est utilisé pour les commandes en ligne de commande cURL à partir du langage PHP.

<?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;
?> 

Étape 1: initialisez une session curl en utilisant curl_init().

Étape 2: Définissez l'option pour CURLOPT_URL. Cette valeur est l'URL à laquelle nous envoyons la demande. Ajoutez un terme de recherche curl en utilisant le paramètre q=. Définissez l'option pour CURLOPT_RETURNTRANSFER. True dira à curl de renvoyer la chaîne au lieu de l’imprimer. Définissez l'option pour CURLOPT_HEADER, false indiquera à curl d'ignorer l'en-tête dans la valeur de retour.

Étape 3: Exécutez la session curl en utilisant curl_exec().

Étape 4: Fermez la session curl que nous avons créée.

Étape 5: sortie la chaîne de retour.

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

Ceci est également utilisé pour l'authentification. Nous pouvons également définir le nom d'utilisateur et le mot de passe pour l'authentification.

Pour plus de fonctionnalités, voir le manuel d'utilisation ou le tutoriel suivant:

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

18
Neha Sinha

Tout d'abord, laissez-nous comprendre les concepts de curl, libcurl et PHP/cURL.

  1. curl : Outil de ligne de commande permettant d’obtenir ou d’envoyer des fichiers à l’aide de la syntaxe URL.

  2. libcurl : une bibliothèque créée par Daniel Stenberg, qui vous permet de vous connecter et de communiquer avec de nombreux types de serveurs avec de nombreux types de protocoles. libcurl supporte actuellement les protocoles http, https, ftp, Gopher, telnet, dict, file et ldap. libcurl prend également en charge les certificats HTTPS, HTTP POST, HTTP PUT, le téléchargement FTP (cela peut également être fait avec l'extension ftp de PHP), le téléchargement basé sur un formulaire HTTP, les proxies, les cookies et l'authentification utilisateur + mot de passe.

  3. PHP/cURL : Le module pour PHP qui permet aux programmes PHP d'utiliser libcurl.

Comment l'utiliser:

step1 : Initialiser une session curl, utilisez curl_init ().

step2 : Définit l'option pour CURLOPT_URL. Cette valeur correspond à l'URL à laquelle nous envoyons la demande. Ajoutez un terme de recherche "curl" à l'aide du paramètre "q =". Définissez l'option CURLOPT_RETURNTRANSFER, true indiquera à curl de renvoyer la chaîne au lieu de l'afficher. Définissez l'option pour CURLOPT_HEADER, false indiquera à curl d'ignorer l'en-tête dans la valeur de retour.

step3 : Exécute la session curl en utilisant curl_exec ().

step4 : Ferme la session curl que nous avons créée.

step5 : Affiche la chaîne de retour.

Make DEMO :

Vous devrez créer deux fichiers PHP et les placer dans un dossier permettant à votre serveur Web de servir les fichiers PHP. Dans mon cas, je les ai mis dans/var/www/pour plus de simplicité. 

1. helloservice.php et 2. demo.php

helloservice.php est très simple et rappelle essentiellement toutes les données qu’il reçoit:

<?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 page, vous pouvez voir le résultat:

<?php 
   print_r($_POST);
   //content type: text/html; charset=UTF-8
   //http code: 200
   //Array ( [message] => Hello World [name] => Anand )
?>
14
Anand Pandey

L’extension cURL de PHP est conçue pour vous permettre d’utiliser diverses ressources Web à partir de votre script PHP.

12
Naved Ahmed

cURL dans PHP est un pont pour utiliser cURL en ligne de commande à partir du langage php

10
Jaime Hablutzel

cURL

  • cURL est un moyen de frapper une URL de votre code pour obtenir une réponse HTML.
  • Il est utilisé pour les commandes en ligne de commande cURL à partir du langage PHP.
  • cURL est une bibliothèque qui vous permet de faire des requêtes HTTP en PHP.

PHP prend en charge libcurl, une bibliothèque créée par Daniel Stenberg, qui vous permet de vous connecter et de communiquer avec différents types de serveurs avec différents types de protocoles. libcurl supporte actuellement les protocoles http, https, ftp, Gopher, telnet, dict, file et ldap. libcurl prend également en charge les certificats HTTPS, HTTP POST, HTTP PUT, le téléchargement FTP (cela peut également être fait avec l'extension ftp de PHP), le téléchargement basé sur un formulaire HTTP, les proxies, les cookies et l'authentification utilisateur + mot de passe.

Une fois que vous avez compilé PHP avec le support de cURL, vous pouvez commencer à utiliser les fonctions de cURL. L’idée de base des fonctions cURL est d’initialiser une session cURL avec la fonction curl_init (), de définir ensuite toutes les options de transfert via la fonction curl_setopt (), puis d’exécuter la session avec la fonction curl_exec (). terminez votre session en utilisant curl_close ().

Exemple de code

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

Pour plus d'informations, s'il vous plaît vérifier -

6
Joomler

Curl n'est rien d'autre qu'une extension de PHP qui hérite des comportements de la commande et de la bibliothèque curl normales écrites principalement pour l'outil de ligne de commande Linux/Unix.

Qu'est ce que Curl? cURL représente l'URL du client. Le cURL est utilisé pour envoyer des données à n'importe quelle URL. Pour plus de détails sur ce que curl est exactement, vous pouvez visiter Site Web CURL

cURL en PHP Maintenant, le même concept est introduit en PHP, pour envoyer des données à n'importe quelle URL accessible via le protocole différent, par exemple, HTTP ou FTP. Pour plus de détails, vous pouvez vous référer à PHP Tutoriel Curl

1
Ankur Kumar Singh

Fonction curp 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;
}
0
MałyMiszcz

Classe php curl (GET, POST, CHARGEMENT DE FICHIERS, SESSIONS, ENVOYER POST JSON, FORCE SELFSIGNED 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;
            } 
        }
    }
?>

Exemple:

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

Fichier 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());
?>
0
Freelancer