成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP 中的 cURL 庫

happen / 409人閱讀

摘要:支持創(chuàng)建的庫,能夠連接通訊各種服務(wù)器使用各種協(xié)議。目前支持的協(xié)議有。在一些復(fù)雜的請求中,不能夠設(shè)置請求頭代理認(rèn)證等相關(guān)信息,更不能向某個服務(wù)器提交表單數(shù)據(jù),上傳文件。文件類型可在文件名后以的格式指定。

概述 簡介

在設(shè)計之初,cURL (Client URL Library)是一種作為使用 URL 語法傳輸數(shù)據(jù)的命令行工具。通過 cURL 庫,我們可以在 PHP 腳本中自由地使用某種協(xié)議來獲取或者提交數(shù)據(jù),比如獲取 HTTP 請求數(shù)據(jù)。簡單的來說,cURL 是客戶端向服務(wù)器請求資源的工具。

PHP 支持 Daniel Stenberg 創(chuàng)建的 libcurl 庫,能夠連接通訊各種服務(wù)器、使用各種協(xié)議。libcurl 目前支持的協(xié)議有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同時支持 HTTPS 證書、HTTP POST、HTTP PUT、 FTP 上傳(也能通過 PHP 的 FTP 擴展完成)、HTTP 基于表單的上傳、代理、cookies、用戶名+密碼的認(rèn)證。
優(yōu)勢

在 PHP 中,想要獲取某個 URL 的內(nèi)容其實很簡單,有多種實現(xiàn)方法,比如使用 file_get_contents() 函數(shù):


雖然 file_get_contents() 函數(shù)使用起來很方便,但是不夠靈活,也沒法進行錯誤處理。在一些復(fù)雜的請求中,不能夠設(shè)置請求頭、Cookie、代理、認(rèn)證等相關(guān)信息,更不能向某個服務(wù)器提交表單數(shù)據(jù),上傳文件。

cURl 庫不但支持豐富的網(wǎng)絡(luò)協(xié)議,而且提供了設(shè)置各種 URL 請求參數(shù)的方法,功能強大。cURL 的使用場景有很多,比如訪問網(wǎng)頁資源,獲取 WebService 接口數(shù)據(jù)、下載 FTP 服務(wù)器文件。

使用 基本步驟

要使用 cURL 來發(fā)送 URL 請求,步驟大體分為以下四步:

初始化 cURL 會話;

設(shè)置請求選項;

執(zhí)行 cURL 會話;

關(guān)閉 cURL 會話。

// 1. 初始化 cURL 會話
$ch = curl_init();

// 2. 設(shè)置請求選項
curl_setopt($ch, CURLOPT_URL, "https://segmentfault.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); # 獲取的信息以字符串返回,而不是直接輸出
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); # 禁止 cURL 驗證對等證書,從而支持 HTTPS 訪問

// 3. 執(zhí)行 cURL 會話
$response = curl_exec($ch);
var_dump($response);

// 4. 關(guān)閉 cURL 會話
curl_close($ch);
cURL 主要通過 curl_setopt() 函數(shù)設(shè)置請求選項,具體的每個選項說明請見 http://php.net/manual/zh/func...
錯誤處理

通過 curl_error() 函數(shù)可以查看 cURL 會話錯誤詳情,而 curl_getinfo() 函數(shù)可以查看響應(yīng)信息。因此,通過這兩個函數(shù)我們可以實現(xiàn)一個簡單的錯誤處理程序,比如我們現(xiàn)在訪問一個不存在的 URL 地址:


實戰(zhàn)案例
1. POST 請求

使用 cURL 模擬發(fā)送 POST 請求:

 $url,
        CURLOPT_RETURNTRANSFER => 1, # 獲取的信息以字符串返回
        CURLOPT_POST => 1,           # 發(fā)送 POST 請求
        CURLOPT_POSTFIELDS => $data, # POST 請求數(shù)據(jù) 
    ]);

    $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:全部數(shù)據(jù)使用 HTTP 協(xié)議中的 "POST" 操作來發(fā)送。 要發(fā)送文件,在文件名前面加上@前綴并使用完整路徑。 文件類型可在文件名后以 ";type=mimetype" 的格式指定。 這個參數(shù)可以是 urlencoded 后的字符串,類似"val1=1&val2=2&...",也可以使用一個以字段名為鍵值,字段數(shù)據(jù)為值的數(shù)組。

通過 cURL 發(fā)送 POST 請求來實現(xiàn)文件上傳:

 $url,
        CURLOPT_RETURNTRANSFER => 1, # 獲取的信息以字符串返回
        CURLOPT_POST => 1,           # 發(fā)送 POST 請求
        CURLOPT_POSTFIELDS => $data, # POST 請求數(shù)據(jù) 
    ]);

    $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 請求是一樣的,只是文件下載把返回內(nèi)容保存至文件中,而不是簡單的輸出。配合 file_put_contents() 函數(shù)實現(xiàn)文件下載:

 $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 認(rèn)證

如果服務(wù)器端需要驗證請求,設(shè)置 CURLOPT_USERPWD 參數(shù)即可:

 $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 來保持登錄狀態(tài)的應(yīng)用。首先我們需要通過賬號密碼登錄獲取到 Cookie 數(shù)據(jù),然后利用已登錄的 Cookie 獲取頁面數(shù)據(jù):

 $url,
        CURLOPT_POST => 1,           # 發(fā)送 POST 請求
        CURLOPT_POSTFIELDS => $data, # POST 請求數(shù)據(jù) 
        CURLOPT_COOKIEJAR => $cookie # 將 cookie 信息保存至文件中
        CURLOPT_RETURNTRANSFER => 1, # 獲取的信息以字符串返回
    ]);

    $response = curl_exec($ch);
    
    curl_close($ch);
    
    return $response;
}

// 獲取頁面數(shù)據(jù)
function curl_content($url, $cookie) {
    $ch = curl_init(); 
    
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_COOKIEFILE => $cookie # 加載包含 Cookie 數(shù)據(jù)的文件
        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 封裝庫,它可以非常方便地發(fā)送 HTTP 請求并與任何類型的 Web API 集成。PHP Curl Class 封裝庫適用于 PHP 5.3,5.4,5.5,5.6,7.0,7.1 和 HHVM。這個庫是眾所周知的,并提供了一個非常簡單的語法:

get("https://www.example.com/");

if ($curl->error) {
    echo "Error: " . $curl->errorCode . ": " . $curl->errorMessage . "
";
} else {
    echo "Response:" . "
";
    var_dump($curl->response);
}

參考文章:

Client URL 庫

php中的curl使用入門教程和常見用法實例

在PHP中使用CURL,“撩”服務(wù)器只需幾行——php curl詳細解析和常見大坑

Top 7: Best Curl Wrapper Libraries for PHP

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28555.html

相關(guān)文章

  • php平滑升級

    摘要:錯誤發(fā)生點在建立是出錯,沒給到要的函式庫參數(shù)。第二種解決方法升級情況說明是默認(rèn)使用安裝為,現(xiàn)有項目需要支持。當(dāng)前版本輸出信息下載最新的開始升級關(guān)閉開啟刪除原有的動態(tài)庫將新動態(tài)庫放到對應(yīng)位置刷新動態(tài)庫添加升級后查看版本版本信息 php平滑升級 1.既然是平滑升級,是不需要宕機,也不需要停止服務(wù),是不存在關(guān)閉網(wǎng)站的說法 2.而升級最后的重啟,重啟的是PHP加載的配置文件,不影響你當(dāng)前運行的...

    AlexTuan 評論0 收藏0
  • PHP回顧之IO

    摘要:命令行時返回值為,標(biāo)準(zhǔn)輸入輸出均指向終端可用進程號查看。會在腳本執(zhí)行完畢后關(guān)閉三個流,無需用戶手動關(guān)閉。與遠程網(wǎng)址交互是一個請求和響應(yīng)的過程,其中細節(jié)可參考本人之前的文章回顧之請求和回顧之響應(yīng),也可參考協(xié)議的權(quán)威文檔。 轉(zhuǎn)載請注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請求 cookie web響應(yīng) ses...

    happen 評論0 收藏0
  • 基于haddop的HDFS和Excel開源POI導(dǎo)出大數(shù)據(jù)報表(一)

    摘要:說明這里用到的項目都是基于的項目。但同時,它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。放寬了一部分約束,來實現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。是項目的一部分。 關(guān)鍵詞 Java、PHP、hdfs、mqrocket、excel、poi、報表 需求背景 在業(yè)務(wù)需求方面,每個企業(yè)或多或少都會有報表導(dǎo)出的作業(yè),量少則可是使用輸出流或者字符串的...

    Nekron 評論0 收藏0
  • 基于haddop的HDFS和Excel開源POI導(dǎo)出大數(shù)據(jù)報表(一)

    摘要:說明這里用到的項目都是基于的項目。但同時,它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。放寬了一部分約束,來實現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。是項目的一部分。 關(guān)鍵詞 Java、PHP、hdfs、mqrocket、excel、poi、報表 需求背景 在業(yè)務(wù)需求方面,每個企業(yè)或多或少都會有報表導(dǎo)出的作業(yè),量少則可是使用輸出流或者字符串的...

    luffyZh 評論0 收藏0
  • PHP7.0.0在OS X編譯安裝

    摘要:目前支持和協(xié)議。除此以外,還能在可能的字符編碼之間相互進行編碼轉(zhuǎn)換。如果啟用了這個功能,輸入字符編碼可能將自動轉(zhuǎn)換成。這些可能在未來增加。 前言 PHP7即將在12月3日正式發(fā)布,而RC8是已經(jīng)差不多穩(wěn)定了的版本,后續(xù)的GA版本主要都是在修復(fù)bug,所以為了未來開發(fā)環(huán)境的升級,準(zhǔn)備嘗試安裝一下。 PHP7.0.0將在12月3日正式發(fā)布,但是12月2日時github已經(jīng)發(fā)布出PHP-7...

    lordharrd 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<