Maison  >  Article  >  développement back-end  >  bibliothèque cURL en PHP

bibliothèque cURL en PHP

不言
不言original
2018-04-09 15:51:371838parcourir

Cet article vous présente la bibliothèque cURL en PHP Maintenant, je la partage avec vous. Les amis dans le besoin peuvent s'y référer

Présentation

Introduction

À l'origine. conçu, cURL (Client URL Library) était un outil de ligne de commande permettant de transférer des données à l'aide de la syntaxe URL. Grâce à la bibliothèque cURL, nous pouvons utiliser librement un certain protocole dans les scripts PHP pour obtenir ou soumettre des données, comme l'obtention de données de requête HTTP. En termes simples, cURL est un outil permettant aux clients de demander des ressources aux serveurs.

PHP prend en charge la bibliothèque libcurl créée par Daniel Stenberg, qui peut se connecter à différents serveurs et utiliser différents protocoles. Les protocoles actuellement pris en charge par libcurl incluent 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 (peut également être complété via l'extension FTP de PHP), le téléchargement basé sur un formulaire HTTP, le proxy, les cookies, l'authentification par nom d'utilisateur et mot de passe.

Avantages

En PHP, il est en réalité très simple d'obtenir le contenu d'une URL. Il existe de nombreuses façons d'y parvenir, comme par exemple en utilisant la fonction file_get_contents() :

<.>
<?php
$content = file_get_contents("https://segmentfault.com");
var_dump($content);
Bien que la fonction

soit très pratique à utiliser, elle n'est pas assez flexible et ne peut pas gérer les erreurs. Dans certaines requêtes complexes, les en-têtes de requête, les cookies, les proxys, l'authentification et autres informations connexes ne peuvent pas être définis, et les données de formulaire ne peuvent pas non plus être soumises à un serveur ou les fichiers téléchargés. file_get_contents()

La bibliothèque cURl prend non seulement en charge des protocoles réseau riches, mais fournit également des méthodes puissantes pour définir divers paramètres de requête d'URL. Il existe de nombreux scénarios d'utilisation de cURL, tels que l'accès aux ressources Web, l'obtention de données d'interface WebService et le téléchargement de fichiers de serveur FTP.

Étapes de base pour utiliser

Pour utiliser cURL pour envoyer des requêtes d'URL, les étapes sont grossièrement divisées en quatre étapes suivantes :

  1. Session cURL d'initialisation ;

  2. Définir les options de requête

  3. Exécuter la session cURL ; >Fermer la session cURL.

  4. cURL définit principalement les options de requête via la fonction

    Pour des descriptions spécifiques de chaque option, veuillez consulter http://php.net/manual/zh/func. ..
Gestion des erreurs
// 1. 初始化 cURL 会话
$ch = curl_init();

// 2. 设置请求选项
curl_setopt($ch, CURLOPT_URL, "https://segmentfault.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); # 获取的信息以字符串返回,而不是直接输出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); # 禁止 cURL 验证对等证书,从而支持 HTTPS 访问

// 3. 执行 cURL 会话
$response = curl_exec($ch);
var_dump($response);

// 4. 关闭 cURL 会话
curl_close($ch);
Les détails de l'erreur de session cURL peuvent être consultés via la fonction curl_setopt(), et les informations de réponse peuvent être consultées via la fonction
. Ainsi, grâce à ces deux fonctions, nous pouvons implémenter un gestionnaire d'erreurs simple. Par exemple, si nous accédons désormais à une adresse URL inexistante :

Cas pratiquecurl_error()curl_getinfo()1. 🎜>

Utilisez cURL pour simuler l'envoi d'une requête POST :
<?php

// 1. 初始化 cURL 会话
$ch = curl_init();

// 2. 设置请求选项
curl_setopt($ch, CURLOPT_URL, "https://segmentfault.com/test.php"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); # 获取的信息以字符串返回,而不是直接输出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); # 禁止 cURL 验证对等证书,从而支持 HTTPS 访问

// 3. 执行 cURL 会话
$response = curl_exec($ch);

if ($response  === FALSE) {
    echo "cURL connert error: " . curl_error($ch);
    exit;
}

$info = curl_getinfo($ch);
if ($info[&#39;http_code&#39;] == 404) {
    echo &#39;HTTP 404&#39;;
    exit;
}

var_dump($response);

// 4. 关闭 cURL 会话
curl_close($ch);

2. Téléchargement de fichiers

CURLOPT_POSTFIELDS : Toutes les données sont envoyées à l'aide de l'opération "POST" dans le protocole HTTP. Pour envoyer un fichier, préfixez le nom du fichier avec @ et utilisez le chemin complet. Le type de fichier peut être spécifié au format « ;type=mimetype » après le nom du fichier. Ce paramètre peut être une chaîne codée en URL, similaire à 'val1=1&val2=2&...', ou vous pouvez utiliser un tableau avec le nom du champ comme clé et les données du champ comme valeur.

Envoyez une requête POST via cURL pour implémenter le téléchargement de fichiers :
<?php
function curl_post($url, $data) {
    $ch = curl_init(); 

    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
        CURLOPT_POST => 1,           # 发送 POST 请求
        CURLOPT_POSTFIELDS => $data, # POST 请求数据 
    ]);

    $response = curl_exec($ch);
    
    curl_close($ch);
    
    return $response;
}

$url  = &#39;http://localhost/test.php&#39;;
$data = [&#39;id&#39; => 1, &#39;username&#39; => &#39;jochen&#39;];
echo curl_post($url, $data);

3. Téléchargement de fichiers
En fait, le téléchargement de fichiers est identique à une requête GET normale, il suffit de télécharger un fichier Enregistrez le contenu renvoyé dans un fichier au lieu de simplement le sortir. Coopérer avec la fonction

pour implémenter le téléchargement de fichiers :

<?php
function curl_upload($url, $data) {
    $ch = curl_init(); 

    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
        CURLOPT_POST => 1,           # 发送 POST 请求
        CURLOPT_POSTFIELDS => $data, # POST 请求数据 
    ]);

    $response = curl_exec($ch);
    
    curl_close($ch);
    
    return $response;
}

$url  = &#39;http://localhost/test.php&#39;;
$data = [&#39;id&#39; => 1, &#39;file&#39; => &#39;@/root/image/boy.jpg&#39;];
echo curl_post($url, $data);

4. Authentification HTTP

Si le serveur doit vérifier la demande, définissez simplement le paramètre file_put_contents() :

56b62e99cd671c33a22cc122cd1dca25 $url,
        CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
    ]);

    $response = curl_exec($ch);
    
    curl_close($ch);
    
    return file_put_contents($path, $response);
}

curl_download('http://localhost/boy.jpg', './boy.jpg');

5. Connexion simulée

Ici, nous montrons principalement les applications qui utilisent des cookies pour maintenir le statut de connexion. Tout d'abord, nous devons nous connecter avec le compte et le mot de passe pour obtenir les données du Cookie, puis utiliser le Cookie connecté pour obtenir les données de la page : CURLOPT_USERPWD

<?php
function curl_auth($url, $user, $passwd) {
    $ch = curl_init();
    
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_USERPWD => "$user:$passwd", # 格式为:"[username]:[password]"
        CURLOPT_RETURNTRANSFER => 1
    ]);
    
    $result = curl_exec($ch);
    
    curl_close($ch);
    
    return $result;
}

echo curl_auth(&#39;http://localhost&#39;, &#39;jochen&#39;, &#39;password&#39;);
bibliothèque d'emballages cURL

PHP Curl Class est une bibliothèque de wrapper cURL bien écrite, ce qui rend très pratique l'envoi de requêtes HTTP et l'intégration à tout type d'API Web. La bibliothèque wrapper PHP Curl Class est disponible pour PHP 5.3, 5.4, 5.5, 5.6, 7.0, 7.1 et HHVM. Cette bibliothèque est bien connue et propose une syntaxe très simple :

<?php
// 模拟登录获取 Cookie
function curl_login($url, $data, $cookie) {
    $ch = curl_init(); 

    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_POST => 1,           # 发送 POST 请求
        CURLOPT_POSTFIELDS => $data, # POST 请求数据 
        CURLOPT_COOKIEJAR => $cookie # 将 cookie 信息保存至文件中
        CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
    ]);

    $response = curl_exec($ch);
    
    curl_close($ch);
    
    return $response;
}

// 获取页面数据
function curl_content($url, $cookie) {
    $ch = curl_init(); 
    
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_COOKIEFILE => $cookie # 加载包含 Cookie 数据的文件
        CURLOPT_RETURNTRANSFER => 1, # 获取的信息以字符串返回
    ]);

    $response = curl_exec($ch);
    
    curl_close($ch);
    
    return $response;
}

$post = [&#39;username&#39; => &#39;jochen&#39;, &#39;password&#39; => &#39;123456&#39;];
$cookie = &#39;./cookie.txt&#39;;
if (curl_login(&#39;http://localhost/login&#39;, $post,  $cookie)) {
    echo curl_content(&#39;http://localhost&#39;, $cookie);
}
Article de référence :

Bibliothèque d'URL client
<?php
require __DIR__ . &#39;/vendor/autoload.php&#39;;

use \Curl\Curl;

$curl = new Curl();
$curl->get(&#39;https://www.example.com/&#39;);

if ($curl->error) {
    echo &#39;Error: &#39; . $curl->errorCode . &#39;: &#39; . $curl->errorMessage . "\n";
} else {
    echo &#39;Response:&#39; . "\n";
    var_dump($curl->response);
}

    Tutoriel d'introduction et exemples d'utilisation courante de curl en php
  1. En utilisant CURL en PHP, il suffit de quelques lignes pour "tromper" le serveur - analyse détaillée de php curl et exemples d'utilisation courante Pièges
  2. Top 7 : Meilleures bibliothèques Curl Wrapper pour PHP
  3. Recommandations associées :

  4. PHP La concurrence utilise curl pour réduire le temps d'accès au backend


PHP simule la connexion et obtient des données via CURL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn