PHP peut utiliser la fonction file_get_content() pour capturer le contenu d'une page Web, mais il ne peut pas effectuer de traitements plus complexes, tels que le téléchargement ou le téléchargement de fichiers, les opérations de cookies, etc. Le cURL de PHP fournit ces fonctions.
cURL est une bibliothèque d'extensions pour PHP. Il peut se connecter et communiquer avec différents types de serveurs et en utilisant différents types de protocoles.
Il prend actuellement en charge les protocoles http, https, ftp, gopher, telnet, dict, file et ldap, et prend également en charge l'authentification HTTPS, HTTP POST, le téléchargement FTP, le proxy, les cookies et l'authentification par nom d'utilisateur + mot de passe, etc.
Fonctions communes
函数 | 描述 |
curl_init() | 初始化 cURL 会话 |
curl_setopt() | 设置 cURL 选项 |
curl_exec() |
执行 cURL 会话 |
curl_getinfo() | 获取当前会话信息 |
curl_errno() | 返回最后一次的错误代码 |
curl_error() | 返回当前会话最后一次的错误字符串 |
curl_close() | 关闭 cURL 会话 |
Autres fonctions
函数 | 描述 |
curl_copy_handle() | 复制一个 cURL 句柄和它的所有选项。 |
curl_escape() | 返回转义字符串,对给定的字符串进行URL编码。 |
curl_file_create() | 创建一个 CURLFile 对象。 |
curl_multi_add_handle() | 向 cURL 批处理会话中添加单独的curl句柄。 |
curl_multi_close() | 关闭一组 cURL 句柄。 |
curl_multi_exec() | 运行当前 cURL 句柄的子连接。 |
curl_multi_getcontent() | 如果设置了 CURLOPT_RETURNTRANSFER ,则返回获取的输出的文本流。 |
curl_multi_info_read() | 获取当前解析的 cURL 的相关传输信息。 |
curl_multi_init() | 返回一个新 cURL 批处理句柄。 |
curl_multi_remove_handle() | 移除 cURL 批处理句柄资源中的某个句柄资源。 |
curl_multi_select() | 等待所有 cURL 批处理中的活动连接。 |
curl_multi_setopt() | 设置一个批处理 cURL 传输选项。 |
curl_multi_strerror() | 返回描述错误码的字符串文本。 |
curl_pause() | 暂停及恢复连接。 |
curl_reset() | 重置 libcurl 的会话句柄的所有选项。 |
curl_setopt_array() | 为 cURL 传输会话批量设置选项。 |
curl_share_close() | 关闭 cURL 共享句柄。 |
curl_share_init() | 初始化 cURL 共享句柄。 |
curl_share_setopt() | 设置一个共享句柄的 cURL 传输选项。 |
curl_strerror() | 返回错误代码的字符串描述。 |
curl_unescape() | 解码 URL 编码后的字符串。 |
curl_version() | 获取 cURL 版本信息。 |
1. Initialiser la session cURL
2. Définir les options cURL
3. . Obtenez des informations sur cURL et/ou des informations sur les erreurs (cette étape est facultative)
5. Fermez le handle cURL
L'étape la plus compliquée est l'étape 2. Il existe de nombreuses options de configuration de cURL ci-dessous. j'en apprendrai davantage à l'aide d'exemples.
4. Exemple 1 : requête GET
Préparez un script de test index.php dans le répertoire racine du serveur local localserver.com avec le contenu suivant :
Le navigateur accède à la page d'accueil du serveur local localserver.com/index .php et affiche la page d'accueil de Baidu.<?php $url = 'http://www.baidu.com'; // 初始化,获得一个cURL句柄 $ch = curl_init(); // 设置选项 curl_setopt($ch, CURLOPT_URL, $url); // 请求URL curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据流,而不直接输出 curl_setopt($ch, CURLOPT_HEADER, 0); // 无需响应的header头 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); //连接超时,秒为单位 // 执行并获取返回内容 $output = curl_exec($ch); if($output === false){ $output = 'cURL error: ' . curl_error($ch); } // 释放 cURL 句柄资源 curl_close($ch); print_r($output); ?>
5. Exemple 2. Requête POST
curl_setopt($ch, CURLOPT_POST, 1); // 表明POST请求 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData)); // POST提交数据
<?php $input = file_get_contents('php://input'); echo $input; ?>
<?php $url = 'http://remoteserver.com/index.php'; $data = array( 'fname'=> 'Daniel', 'lname' => 'Stenberg' ); // 初始化 $ch = curl_init(); // 设置选项 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_POST, 1); // POST请求 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //POST数据。用http_build_query()转换为“&”拼接的字符串 // 执行并获取返回内容 $output = curl_exec($ch); if($output === false){ $output = 'cURL error: ' . curl_error($ch); } // 释放 cURL 句柄资源 curl_close($ch); print_r($output); ?>
fname=Daniel&lname=Stenberg
Préparez d'abord un script index.php à recevoir dans le répertoire racine du serveur distant remoteserver.com, avec le contenu suivant :
Préparez ensuite une image dans le répertoire racine de le serveur local localserver.com Fichier test.jpg et le script de téléchargement cURL index.php, le contenu du script est le suivant :<?php $action = $_POST['action']; if($action == 'uploadImage'){ $name = $_FILES['file']['name']; $tmpname = $_FILES['file']['tmp_name']; // 保存到当前脚本所在目录 move_uploaded_file($tmpname, dirname(__FILE__).'/'.$name); $error = $_FILES['file']['error']; switch ($error) { case 0: echo '上传成功'; break; case 1: echo '文件大小超出 php.ini 限制'; break; case 2: echo '文件大小超出 表单 MAX_FILE_SIZE 限制'; break; case 3: echo '文件部分被上传'; break; case 4: echo '没有文件被上传'; break; case 6: echo '找不到临时文件夹'; break; case 7: echo '文件写入失败'; break; default: $output = '未知错误'; } } ?>
<?php $url = 'http://remoteserver.com/index.php'; $file = realpath(getcwd() . '/test.jpg'); $data = array( 'action' => 'uploadImage', 'file' => '@' . $file ); if(version_compare(PHP_VERSION, '5.6.0') > 0){ $data['file'] = new CURLFile($file); } // 初始化 $ch = curl_init(); // 设置选项 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 执行并获取返回内容 $output = curl_exec($ch); if($output === false){ $output = 'cURL error: ' . curl_error($ch); } // 释放 cURL 句柄资源 curl_close($ch); print_r($output); ?>
上传成功
7. Exemple 4. Télécharger des fichiers
Écrivez le script de test index.php dans le répertoire racine du serveur local localserver.com Le contenu est le suivant :
Lorsque le navigateur accède à localserver.com/index. php, l'affichage est le suivant :<?php $url = 'http://remoteserver.com/test.jpg'; $file = './test.jpg'; $fp = fopen($file, 'w'); // 初始化 $ch = curl_init(); // 设置选项 curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_FILE, $fp); // 用于传输的文件流,默认是STDOUT // 执行并获取返回内容 $output = curl_exec($ch); if($output === false){ $output = 'cURL error: ' . curl_error($ch); } // 获取已下载大小 $size_download = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD); // 释放资源 fclose($fp); curl_close($ch); if ($size_download && $size_download == filesize($file)) { echo "下载成功"; } else { echo "下载失败或不完整"; } ?>
下载成功
8. Exemple 5. Traitement par lots
Écrivez le script de test index.php dans le répertoire racine du serveur local localserver.com Le contenu est le suivant :
Le navigateur accède à localserver.com/index.php. et affiche la page d'accueil « Connecter » de Baidu et la page d'accueil de Qidian.com.<?php $urls = array( 'http://www.baidu.com', 'http://www.qidian.com' ); $count = count($urls); $ch = array(); // 创建批处理cURL句柄 $mh = curl_multi_init(); // 初始化每个cURL,并设置选项,绑定给批处理句柄 for ($i = 0; $i < $count; $i++) { $ch[$i] = curl_init(); curl_setopt($ch[$i], CURLOPT_URL, $urls[$i]); curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch[$i], CURLOPT_HEADER, 0); curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 30); curl_multi_add_handle($mh, $ch[$i]); } // 执行批处理 $running = null; do { usleep(10000); // 延迟0.01秒,单位为百万分之一秒 curl_multi_exec($mh, $running); // 异步实现批处理,类似“多线程” } while($running > 0); // 获取每个cURL的响应 $res = array(); for ($i = 0; $i < $count; $i++) { $res[$i] = curl_multi_getcontent($ch[$i]); } // 关闭全部句柄 for ($i = 0; $i < $count; $i++) { curl_multi_remove_handle($mh, $ch[$i]); } curl_multi_close($mh); print_r($res); ?>
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!