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: cURL
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: cURL
Réponses:
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) peut être trouvé dans le manuel PHP .
Pour utiliser les fonctions cURL de PHP, vous devez installer le package »libcurl. 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. Depuis PHP 4.3.0, vous aurez besoin d'une version de libcurl 7.9.8 ou supérieure. 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, bien qu'il doive allow_url_fopen
être activé dans votre php.ini
fichier.
// Make a HTTP GET request and print it (requires allow_url_fopen to be enabled)
print file_get_contents('http://www.example.com/');
cURL est un moyen de frapper une URL de votre code pour en obtenir une réponse html. cURL signifie URL client qui vous permet de vous connecter avec d'autres URL et d'utiliser leurs réponses dans votre code.
Résumé:
La curl_exec
commande en PHP est un pont à utiliser curl
depuis la console. curl_exec permet de faire facilement et rapidement des requêtes GET / POST, de recevoir des réponses d'autres serveurs comme JSON et de télécharger des fichiers.
Avertissement, danger:
curl
est mauvais et dangereux s'il est utilisé de manière incorrecte, car il s'agit de récupérer des données sur Internet. Quelqu'un peut se mettre entre votre boucle et l'autre serveur et injecter un rm -rf /
dans votre réponse, puis pourquoi suis-je tombé sur une console et ls -l
ne fonctionne même plus? Parce que vous avez sous-estimé la puissance dangereuse de la boucle. Ne faites pas confiance à tout ce qui revient de curl pour être sûr, même si vous parlez à vos propres serveurs. Vous pourriez retirer des logiciels malveillants pour soulager les imbéciles de leur richesse.
Cela a été fait sur Ubuntu 12.10
Curl de base à partir de 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
Chats glorieux évoluant Toxoplasma gondii pour amener les femmes à garder les chats autour et les hommes aussi à garder les femmes autour.
exemple cURL get request to hit google.com, echo to the commandline:
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);
Qui imprime et décharge un désordre de html condensé et javascript (de google) sur la console.
Exemple cURL mettre le texte de 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.
Faites une boucle à partir d'un fichier PHP:
Mettez ce code dans un fichier appelé 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;
}
?>
Ensuite, 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 et vidé une tonne de code HTML et javascript désordonné à filtrer.
Vous pouvez faire GET
et POST
demander avec curl, tout ce que vous faites est de spécifier les paramètres définis ici: Utilisation de curl pour automatiser les travaux HTTP
Rappel de danger:
Faites attention à la sortie de la boucle, si une partie de celle-ci est interprétée et exécutée, votre boîte appartient et vos informations de carte de crédit seront vendues à des tiers et vous obtiendrez une charge mystérieuse de 900 $ d'une entreprise de revêtement de sol individuelle de l'Alabama qui est un avant pour l'anneau de crime de fraude de carte de crédit à l'étranger.
cURL est un moyen de frapper une URL de votre code pour en obtenir une réponse HTML. Il est utilisé pour la ligne de commande cURL 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 à l'aide de 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 en curl
utilisant le paramètre q=
. Définissez l'option pour CURLOPT_RETURNTRANSFER
. True indique à curl de renvoyer la chaîne au lieu de l'imprimer. Définissez l'option pour CURLOPT_HEADER
, false indique à curl d'ignorer l'en-tête dans la valeur de retour.
Étape 3: Exécutez la session curl à l'aide de curl_exec()
.
Étape 4: fermez la session curl que nous avons créée.
Étape 5: sortie de 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, consultez le manuel d'utilisation ou le tutoriel suivant:
http://php.net/manual/en/ref.curl.php
http://www.startutorial.com/articles/view/php-curl
Commençons par comprendre les concepts de curl, libcurl et PHP / cURL.
curl : Un outil en ligne de commande pour obtenir ou envoyer des fichiers à l'aide de la syntaxe URL.
libcurl : une bibliothèque créée par Daniel Stenberg, qui vous permet de vous connecter et de communiquer avec de nombreux types de serveurs différents avec de nombreux types de protocoles différents. libcurl prend actuellement en charge 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 le formulaire HTTP, les procurations, les cookies et l'authentification utilisateur + mot de passe.
PHP / cURL : Le module pour PHP qui permet aux programmes PHP d'utiliser libcurl.
Comment l'utiliser:
étape 1 : initialiser une session curl, utilisez curl_init ().
étape 2 : définir 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 CURLOPT_RETURNTRANSFER, true indiquera à 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.
step5 : sortie de la chaîne de retour.
Faire DEMO :
Vous devrez créer deux fichiers PHP et les placer dans un dossier à partir duquel votre serveur Web peut servir des 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 fait simplement écho à toutes les données qu'il obtient:
<?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;
?>
Page 2.demo.php , 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 )
?>
L'extension cURL de PHP est conçue pour vous permettre d'utiliser une variété de ressources Web à partir de votre script PHP.
cURL en PHP est un pont pour utiliser la ligne de commande cURL du langage php
PHP prend en charge libcurl, une bibliothèque créée par Daniel Stenberg, qui vous permet de vous connecter et de communiquer avec de nombreux types de serveurs différents avec de nombreux types de protocoles différents. libcurl prend actuellement en charge 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 le formulaire HTTP, les procurations, les cookies et l'authentification utilisateur + mot de passe.
Une fois que vous avez compilé PHP avec le support cURL, vous pouvez commencer à utiliser les fonctions cURL. L'idée de base derrière les fonctions cURL est que vous initialisez une session cURL à l'aide de curl_init (), puis vous pouvez définir toutes vos options pour le transfert via curl_setopt (), puis vous pouvez exécuter la session avec curl_exec () puis vous terminer votre session en utilisant 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 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 signifie URL client. Le cURL est utilisé pour envoyer des données à n'importe quelle URL. Pour plus de détails sur ce qu'est exactement la boucle, vous pouvez visiter le site Web de CURL
cURL en PHP Maintenant, le même concept est introduit en PHP, pour envoyer des données à n'importe quelle URL accessible via les différents protocoles, par exemple HTTP ou FTP. Pour plus de détails, vous pouvez vous référer au Tutoriel PHP Curl
Fonction 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;
}
Classe PHP Curl (GET, POST, FILES UPLOAD, SESSIONS, SEND 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());
?>