PHP kann die Funktion file_get_content() zum Erfassen von Webseiteninhalten verwenden, kann jedoch keine komplexeren Verarbeitungen wie das Hoch- oder Herunterladen von Dateien, Cookie-Vorgänge usw. durchführen. cURL von PHP stellt diese Funktionen bereit.
cURL ist eine Erweiterungsbibliothek für PHP. Es kann verschiedene Arten von Servern verbinden und mit ihnen kommunizieren und verschiedene Arten von Protokollen verwenden.
Es unterstützt derzeit die Protokolle http, https, ftp, gopher, telnet, dict, file und ldap sowie HTTPS-Authentifizierung, HTTP POST, FTP-Upload, Proxy, Cookies und Benutzername + Passwort-Authentifizierung usw.
Allgemeine Funktionen
函数 | 描述 |
curl_init() | 初始化 cURL 会话 |
curl_setopt() | 设置 cURL 选项 |
curl_exec() |
执行 cURL 会话 |
curl_getinfo() | 获取当前会话信息 |
curl_errno() | 返回最后一次的错误代码 |
curl_error() | 返回当前会话最后一次的错误字符串 |
curl_close() | 关闭 cURL 会话 |
Andere Funktionen
函数 | 描述 |
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. cURL-Sitzung festlegen
3 . cURL-Informationen und/oder Fehlerinformationen abrufen (dieser Schritt ist optional)
5. Der komplizierteste Schritt ist Schritt 2. Nachfolgend finden Sie viele cURL-Einstellungsoptionen werde es anhand von Beispielen erfahren.
4. Beispiel 1: GET-Anfrage Der Prozess der GET-Anfrage ist der allgemeine Prozess von cURL.
Bereiten Sie im Stammverzeichnis des lokalen Servers localserver.com ein Testskript index.php mit folgendem Inhalt vor:
<?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); ?>
Schreiben Sie dann das Skript index.php für die POST-Anfrage in das Stammverzeichnis des lokalen Servers localserver.com, der Inhalt ist wie folgt :
curl_setopt($ch, CURLOPT_POST, 1); // 表明POST请求 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData)); // POST提交数据
Der Browser greift auf localserver.com/index.php zu und die Anzeige sieht wie folgt aus:
<?php $input = file_get_contents('php://input'); echo $input; ?>
6. Beispiel 3. Dateien hochladen
<?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
Wenn der Browser auf localserver.com/index.php zugreift, ist die Anzeige wie folgt folgt:
<?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 = '未知错误'; } } ?>
Remote anzeigen Im Stammverzeichnis des Servers habe ich ein zusätzliches Bild gefunden, das ich gerade hochgeladen habe.
<?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); ?>
上传成功
Schreiben Sie das Testskript index.php in das Stammverzeichnis des lokalen Servers localserver.com. Der Inhalt lautet wie folgt:
Wenn der Browser auf localserver.com/index zugreift. php, die Anzeige sieht wie folgt aus:Überprüfen Sie das Stammverzeichnis des lokalen Servers und stellen Sie fest, dass das Remote-Image heruntergeladen wurde.
<?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 "下载失败或不完整"; } ?>
下载成功
Schreiben Sie das Testskript index.php in das Stammverzeichnis des lokalen Servers localserver.com. Der Inhalt lautet wie folgt:
Der Browser greift auf localserver.com/index.php zu und zeigt die „Connect“-Baidu-Homepage und die Qidian.com-Homepage an.Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für cURL, das in PHP besser als file_get_contents() ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!