這篇文章要跟大家介紹的內容是PHP 中的cURL 函式庫,現在分享給大家,有需要的朋友可以參考一下
file_get_contents() 函數:
<?php $content = file_get_contents("https://segmentfault.com"); var_dump($content);雖然
file_get_contents() 函數使用起來很方便,但不夠靈活,也沒辦法進行錯誤處理。在一些複雜的請求中,不能夠設定請求頭、Cookie、代理、認證等相關信息,更不能向某個伺服器提交表單數據,上傳文件。
// 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_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);實戰案例1. 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);2. 檔案上傳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);3. 檔案下載其實,檔案下載與普通GET 請求是一樣的,只是檔案下載把返回內容保存至文件中,而不是簡單的輸出。配合
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');4. HTTP 認證如果伺服器端需要驗證要求,設定
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('http://localhost', 'jochen', 'password');5. 模擬登入這裡主要展示模擬登入使用了Cookie 來保持登入狀態的應用程式。首先我們需要透過帳號密碼登入取得Cookie 數據,然後利用已登入的Cookie 取得頁面資料:
<?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); }cURL 封裝庫PHP Curl Class 是一個寫得很好的cURL 封裝庫,它可以非常方便地發送HTTP 請求並與任何類型的Web API 整合。 PHP Curl Class 封裝庫適用於 PHP 5.3,5.4,5.5,5.6,7.0,7.1 和 HHVM。這個函式庫是眾所周知的,並提供了一個非常簡單的語法:
<?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); }#參考文章:
#相關推薦:
以上是PHP 中的 cURL 函式庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!