この記事では、PHP の cURL ライブラリを紹介します。必要な友人が参照できるようにします。
設計の最初は、cURL (クライアント URL ライブラリ) です。 URL 構文を使用してデータを転送するためのコマンド ライン ツール。 cURL ライブラリを使用すると、HTTP リクエスト データの取得など、PHP スクリプトで特定のプロトコルを自由に使用してデータを取得または送信できます。簡単に言えば、cURL はクライアントがサーバーにリソースを要求するためのツールです。
PHP は、Daniel Stenberg によって作成された libcurl ライブラリをサポートしており、さまざまなサーバーに接続し、さまざまなプロトコルを使用できます。 libcurl で現在サポートされているプロトコルには、http、https、ftp、gopher、telnet、dict、file、ldap などがあります。 libcurl は、HTTPS 証明書、HTTP POST、HTTP PUT、FTP アップロード (PHP の FTP 拡張機能を使用して完了することもできます)、HTTP フォームベースのアップロード、プロキシ、Cookie、ユーザー名 + パスワード認証もサポートしています。
PHP では、URL のコンテンツを取得するのは実際には非常に簡単です。 file_get_contents()
関数を使用するなど、さまざまな方法があります。 code>file_get_contents( ) 関数は非常に便利ですが、柔軟性が低く、エラーを処理できません。一部の複雑なリクエストでは、リクエスト ヘッダー、Cookie、プロキシ、認証、およびその他の関連情報を設定できず、フォーム データをサーバーに送信したり、ファイルをアップロードしたりすることもできません。 file_get_contents()
函数:
<?php $content = file_get_contents("https://segmentfault.com"); var_dump($content);
虽然 file_get_contents()
函数使用起来很方便,但是不够灵活,也没法进行错误处理。在一些复杂的请求中,不能够设置请求头、Cookie、代理、认证等相关信息,更不能向某个服务器提交表单数据,上传文件。
cURl 库不但支持丰富的网络协议,而且提供了设置各种 URL 请求参数的方法,功能强大。cURL 的使用场景有很多,比如访问网页资源,获取 WebService 接口数据、下载 FTP 服务器文件。
要使用 cURL 来发送 URL 请求,步骤大体分为以下四步:
初始化 cURL 会话;
设置请求选项;
执行 cURL 会话;
关闭 cURL 会话。
// 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);
cURL 主要通过 curl_setopt()
函数设置请求选项,具体的每个选项说明请见 http://php.net/manual/zh/func...
通过 curl_error()
函数可以查看 cURL 会话错误详情,而 curl_getinfo()
函数可以查看响应信息。因此,通过这两个函数我们可以实现一个简单的错误处理程序,比如我们现在访问一个不存在的 URL 地址:
<?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['http_code'] == 404) { echo 'HTTP 404'; exit; } var_dump($response); // 4. 关闭 cURL 会话 curl_close($ch);
使用 cURL 模拟发送 POST 请求:
<?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 = 'http://localhost/test.php'; $data = ['id' => 1, 'username' => 'jochen']; echo curl_post($url, $data);
CURLOPT_POSTFIELDS:全部数据使用 HTTP 协议中的 "POST" 操作来发送。 要发送文件,在文件名前面加上@前缀并使用完整路径。 文件类型可在文件名后以 ';type=mimetype' 的格式指定。 这个参数可以是 urlencoded 后的字符串,类似'val1=1&val2=2&...',也可以使用一个以字段名为键值,字段数据为值的数组。
通过 cURL 发送 POST 请求来实现文件上传:
<?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 = 'http://localhost/test.php'; $data = ['id' => 1, 'file' => '@/root/image/boy.jpg']; echo curl_post($url, $data);
其实,文件下载与普通 GET 请求是一样的,只是文件下载把返回内容保存至文件中,而不是简单的输出。配合 file_put_contents()
函数实现文件下载:
<?php function curl_download($url, $path) { $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $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');
如果服务器端需要验证请求,设置 CURLOPT_USERPWD
cURL セッションを閉じます。
<?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('http://localhost', 'jochen', 'password');
curl_setopt()
関数を通じてリクエスト オプションを設定します。各オプションの詳細については、http://php.net/manual/zh/func... を参照してください。 curl_error()
関数を使用して cURL セッション エラーの詳細を表示でき、curl_getinfo()
関数を使用して応答情報を表示できます。したがって、これら 2 つの関数を通じて、たとえば、存在しない URL アドレスにアクセスすることができます:
<?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 = ['username' => 'jochen', 'password' => '123456']; $cookie = './cookie.txt'; if (curl_login('http://localhost/login', $post, $cookie)) { echo curl_content('http://localhost', $cookie); }
1. POST リクエストの送信をシミュレートするには、cURL を使用します。
<?php require __DIR__ . '/vendor/autoload.php'; use \Curl\Curl; $curl = new Curl(); $curl->get('https://www.example.com/'); if ($curl->error) { echo 'Error: ' . $curl->errorCode . ': ' . $curl->errorMessage . "\n"; } else { echo 'Response:' . "\n"; var_dump($curl->response); }
CURLOPT_POSTFIELDS: すべてのデータは、HTTP プロトコルの「POST」操作を使用して送信されます。 ファイルを送信するには、ファイル名の前に @ を付け、フルパスを使用します。 ファイルタイプは、ファイル名の後に「;type=mimetype」の形式で指定できます。 このパラメータは、「val1=1&val2=2&...」のような URL コード化された文字列にすることも、フィールド名をキーとして、フィールド データを値として持つ配列を使用することもできます。
3. ファイルのダウンロード
file_put_contents()
関数と連携してファイルのダウンロードを実装します: rrreee4. HTTP 認証
サーバーがリクエストを検証する必要がある場合は、CURLOPT_USERPWD
パラメーターを設定します: rrreee5. 模擬ログイン
ここでは、ログイン状態を維持するために Cookie を使用するアプリケーションを主に示します。まず、アカウントとパスワードを使用してログインして Cookie データを取得し、次にログインした Cookie を使用してページ データを取得する必要があります: 🎜rrreee🎜cURL パッケージ化ライブラリ🎜🎜PHP Curl クラスは、よく書かれた cURL パッケージ化ライブラリです。非常に便利に HTTP リクエストを送信し、あらゆる種類の Web API と統合できます。 PHP Curl クラス ラッパー ライブラリは、PHP 5.3、5.4、5.5、5.6、7.0、7.1、および HHVM で使用できます。このライブラリはよく知られており、非常に単純な構文を提供します: 🎜rrreee🎜 参考記事: 🎜🎜🎜🎜クライアント URL ライブラリ 🎜🎜🎜🎜 PHP でのcurlの入門チュートリアルと一般的な使用例 🎜🎜🎜🎜 in PHP CURLを使用すると、わずか数行でサーバーを「騙す」ことができます - PHP カールの詳細な分析と一般的な落とし穴🎜🎜🎜🎜トップ 7: PHP に最適な Curl ラッパー ライブラリ🎜🎜🎜🎜🎜関連する推奨事項: 🎜🎜🎜PHP の同時実行でのcurlの使用バックエンドのアクセス時間を短縮します🎜🎜🎜🎜PHP は、CURL を介してログインとデータの取得をシミュレートします🎜🎜以上がPHPのcURLライブラリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。