Maison >développement back-end >tutoriel php >Explication détaillée de l'utilisation de CURL en PHP

Explication détaillée de l'utilisation de CURL en PHP

韦小宝
韦小宝original
2018-02-10 10:52:043079parcourir

CURL est une bibliothèque open source très puissante qui prend en charge de nombreux protocoles, notamment HTTP, FTP, TELNET, etc. Nous l'utilisons pour envoyer des requêtes HTTP. L'avantage que cela nous apporte est que nous pouvons définir différents paramètres du protocole HTTP via des options flexibles et prendre en charge HTTPS. CURL peut choisir automatiquement de crypter le contenu envoyé selon que le préfixe de l'URL est "HTTP" ou "HTTPS".

Le processus de base d'envoi d'une requête à l'aide de CURL

Utiliser l'extension PHP de CURL pour terminer l'envoi d'une requête HTTP comporte généralement les étapes suivantes :

Initialiser le handle de connexion

Définissez les options CURL ;

Exécutez et obtenez les résultats

Relâchez le handle de connexion VURL.

Le fragment de programme suivant est un processus typique d'utilisation de CURL pour envoyer du HTTP

// 1. 初始化
 $ch = curl_init(); // 2. 设置选项,包括URL
 curl_setopt($ch,CURLOPT_URL,"http://www.devdo.net");
 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
 curl_setopt($ch,CURLOPT_HEADER,0); // 3. 执行并获取HTML文档内容
 $output = curl_exec($ch); if($output === FALSE ){ echo "CURL Error:".curl_error($ch);
 } // 4. 释放curl句柄
 curl_close($ch);
Quatre fonctions sont utilisées dans le code ci-dessus

1. CURLOPT_URL spécifie l'URL demandée ; Le retour de la fonction est la chaîne de retour de l'URL, au lieu de diriger la chaîne de retour ; à la sortie standard et renvoyant TRUE ;

CURL propose de nombreuses options. Vous pouvez accéder au site officiel de PHP (http://www.php.net/manual/en/function.curl-setopt.php) pour afficher une liste de toutes les options prises en charge par. BOUCLE .

Obtenir les informations de sortie de la requête CURL

Une fois la fonction curl_exec() exécutée, vous pouvez utiliser la fonction curl_getinfo() pour obtenir les informations pertinentes de sortie de la requête CURL. Le code est le suivant :

Dans le code ci-dessus, curl_getinfo renvoie un tableau associatif, contenant les données suivantes :

curl_exec($ch);
$info = curl_getinfo($sh);
echo ' 获取 '.$info['url'].'耗时'.$info['total_time'].'秒';
url : adresse réseau.

  • content_type : encodage du contenu.

  • http_code :

    Code d'état HTTP

    .
  • header_size : La taille de l'en-tête.

  • request_size : La taille de la requête.

  • filetime : l'heure à laquelle le fichier a été créé.

  • ssl_verify_result : résultat de la vérification SSL.

  • redirect_count : nombre de sauts.

  • total_time : temps total pris.

  • namelookup_time : heure de la requête DNS.

  • connect_time : Temps passé à attendre la connexion.

  • pretransfer_time : Temps de préparation du pré-transfert.

  • size_uplpad : La taille des données téléchargées.

  • size_download : La taille des données téléchargées.

  • speed_download : Vitesse de téléchargement.

  • speed_upload : Vitesse de téléchargement.

  • download_content_length : La longueur du contenu téléchargé.

  • upload_content_length : La longueur du contenu téléchargé.

  • starttransfer_time : Horaires de début du transfert.

  • redirect_time : heure de redirection.

curl_getinfo()函数还有一个可选择参数$opt,通过这个参数可以设置一些常量,对应到上术这个字段,如果设置了第二个参数,那么返回的只有指定的信息。例如设置$opt为CURLINFO_TOTAL_TIME,则curl_getinfo()函数只返回total_time,即总传输消耗的时间,在只需要关注某些传输信息时,设置$opt参数很有意义。

使用CURL发送GET请求

如何使用CURL来发送GET请求,发送GET请求的关键是拼装格式正确的URL。请求地址和GET数据由一个“?”分割,然后GET变量的名称和值用“=”分隔,各个GET名称和值由“&”连接。PHP为我们提供了一个函数专门用来拼装GET请求和数据部分——http_build_query,该函数接受一个关联数组,返回由该关联数据描述的GET请求字符串。使用这个函数,结合CURL发送HTTP请求的一般流程,我们封闭了一个发送GET请求的函数——doCurlGetRequest,具体代码如下:

**
 *@desc 封闭curl的调用接口,get的请求方式。
*/
function doCurlGetRequest($url,$data,$timeout = 5){
 if($curl == "" || $timeout <= 0){
 return false;
 }
 $url = $url.&#39;?&#39;.http_bulid_query($data);
 $con = curl_init((string)$url);
 curl_setopt($con, CURLOPT_HEADER, false);
 curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
 curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout);
 
 return curl_exec($con);
}

这个函数把使用http_build_query 拼装好的带GET参数的URL传给curl_init函数,然后使用CURL发送HTTP请求。

使用CURL发送POST请求

可以使用CURL提供的选项CURLOPT_POSTFIELDS,设置该选项为POST字符串数据就可以把请求放在正文中。同样我们实现了一个发送POST请求的函数——doCurlPostRequest,代码如下:

/**
** @desc 封装 curl 的调用接口,post的请求方式
**/
function doCurlPostRequest($url,$requestString,$timeout = 5){
 if($url == &#39;&#39; || $requestString == &#39;&#39; || $timeout <=0){
 return false;
 }
 $con = curl_init((string)$url);
 curl_setopt($con, CURLOPT_HEADER, false);
 curl_setopt($con, CURLOPT_POSTFIELDS, $requestString);
 curl_setopt($con, CURLOPT_POST,true);
 curl_setopt($con, CURLOPT_RETURNTRANSFER,true);
 curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout);
 return curl_exec($con); 
}

上面代码中除了设置CURLOPT_POSTFIELDS外,我们还设置了CURL_POST为true,标识这个请求是一个POST请求。在POST请求中也是可以传输GET数据的,只需要在URL中拼装GET请求数据即可秀。

相关文件

php实现curl上传下载https登陆

本文主要和大家介绍了php curl上传、下载、https登陆实现代码,需要的朋友可以参考下......

PHP功能强大的CURL POST类

本文主要为大家详细介绍了功能强大的PHP POST提交数据类,代码简洁且具有一定的参......

PHP学习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