国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP 中的 cURL 庫

happen / 406人閱讀

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

概述 簡介

在設(shè)計(jì)之初,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 同時(shí)支持 HTTPS 證書、HTTP POST、HTTP PUT、 FTP 上傳(也能通過 PHP 的 FTP 擴(kuò)展完成)、HTTP 基于表單的上傳、代理、cookies、用戶名+密碼的認(rèn)證。
優(yōu)勢

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


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

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

使用 基本步驟

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

初始化 cURL 會(huì)話;

設(shè)置請求選項(xiàng);

執(zhí)行 cURL 會(huì)話;

關(guān)閉 cURL 會(huì)話。

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

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

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

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

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


實(shí)戰(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" 的格式指定。 這個(gè)參數(shù)可以是 urlencoded 后的字符串,類似"val1=1&val2=2&...",也可以使用一個(gè)以字段名為鍵值,字段數(shù)據(jù)為值的數(shù)組。

通過 cURL 發(fā)送 POST 請求來實(shí)現(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. 文件下載

其實(shí),文件下載與普通 GET 請求是一樣的,只是文件下載把返回內(nèi)容保存至文件中,而不是簡單的輸出。配合 file_put_contents() 函數(shù)實(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ù)器端需要驗(yàn)證請求,設(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 是一個(gè)編寫得很好的 cURL 封裝庫,它可以非常方便地發(fā)送 HTTP 請求并與任何類型的 Web API 集成。PHP Curl Class 封裝庫適用于 PHP 5.3,5.4,5.5,5.6,7.0,7.1 和 HHVM。這個(gè)庫是眾所周知的,并提供了一個(gè)非常簡單的語法:

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使用入門教程和常見用法實(shí)例

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

Top 7: Best Curl Wrapper Libraries for PHP

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

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

相關(guān)文章

  • php平滑升級

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

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

    摘要:命令行時(shí)返回值為,標(biāo)準(zhǔn)輸入輸出均指向終端可用進(jìn)程號查看。會(huì)在腳本執(zhí)行完畢后關(guān)閉三個(gè)流,無需用戶手動(dòng)關(guān)閉。與遠(yuǎn)程網(wǎng)址交互是一個(gè)請求和響應(yīng)的過程,其中細(xì)節(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ù)報(bào)表(一)

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

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

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

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

    摘要:目前支持和協(xié)議。除此以外,還能在可能的字符編碼之間相互進(jìn)行編碼轉(zhuǎn)換。如果啟用了這個(gè)功能,輸入字符編碼可能將自動(dòng)轉(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日時(shí)github已經(jīng)發(fā)布出PHP-7...

    lordharrd 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<