欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

curl庫 php

錢艷冰1年前5瀏覽0評論
天之道,損有余而補(bǔ)不足。curl庫可以輕松實現(xiàn)http請求,而php的curl庫又是一把神器,方便又實用。無論是進(jìn)行數(shù)據(jù)的上傳、下載或是訪問網(wǎng)絡(luò)API接口,都可以用curl庫來實現(xiàn)。它可以與多數(shù)的web服務(wù)器,ftp服務(wù)器交互,可以從遠(yuǎn)程服務(wù)器獲取文件,支持各種方式請求http。今天我們就來聊一下curl庫在php中的應(yīng)用。 在php中使用curl的第一步,是使用curl_init函數(shù)初始化一個curl句柄。這里我來舉一個獲取天氣API數(shù)據(jù)請求的例子:
<?php
$city = 'beijing';//假設(shè)要請求的城市為beijing
$url = 'http://v.juhe.cn/weather/index?cityname='.$city.'&type=&format=&key=*******************';//填寫你的API接口地址
$curl = curl_init();//開啟curl句柄
curl_setopt($curl, CURLOPT_URL, $url);//設(shè)置請求的url地址
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//設(shè)置獲取的信息不直接輸出到瀏覽器
$data = curl_exec($curl);//執(zhí)行curl句柄
curl_close($curl);//關(guān)閉curl句柄
echo $data;//輸出獲取到的數(shù)據(jù)
?>
這段代碼的功能是利用curl請求一個天氣API接口,請求的城市為北京,將獲取到的數(shù)據(jù)輸出到頁面上。其中,curl_setopt函數(shù)是一個非常強(qiáng)大的函數(shù),無論是請求方式還是header頭信息都可以在這個函數(shù)里進(jìn)行設(shè)置。 但是我們發(fā)現(xiàn),從API中獲取到的數(shù)據(jù)是json格式的,那么在該如何將它轉(zhuǎn)化成PHP中的關(guān)聯(lián)數(shù)組呢?我們需要借助php的內(nèi)置函數(shù)json_decode函數(shù)。這里我也同樣來舉例一下:
<?php
$city = 'beijing';//假設(shè)要請求的城市為beijing
$url = 'http://v.juhe.cn/weather/index?cityname='.$city.'&type=&format=&key=*******************';//填寫你的API接口地址
$curl = curl_init();//開啟curl句柄
curl_setopt($curl, CURLOPT_URL, $url);//設(shè)置請求的url地址
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//設(shè)置獲取的信息不直接輸出到瀏覽器
$data = curl_exec($curl);//執(zhí)行curl句柄
curl_close($curl);//關(guān)閉curl句柄
$jsonData = json_decode($data, true);//將json字符串轉(zhuǎn)換成PHP關(guān)聯(lián)數(shù)組
echo '<pre>', print_r($jsonData, true), '</pre>';
?>
這段代碼的功能是一樣的,只是增加了一行將json數(shù)據(jù)轉(zhuǎn)化成php關(guān)聯(lián)數(shù)組的代碼,同時在后面輸出的時候使用了pre標(biāo)簽來輸出。這樣,我們就可以測試獲取到的數(shù)組數(shù)據(jù),方便我們?nèi)?shù)據(jù)做進(jìn)一步的處理。而json_decode函數(shù),同樣有著強(qiáng)大的功能,不僅僅可以將json數(shù)據(jù)轉(zhuǎn)化成數(shù)組,還可以將數(shù)據(jù)轉(zhuǎn)化成對象。根據(jù)項目的需求不同,選擇不同的轉(zhuǎn)化方式即可。 最后還有一個問題,我們在進(jìn)行一些敏感性操作的時候,需要將請求的數(shù)據(jù)加密傳輸。這里就需要用到curl請求的https協(xié)議。先證書不要慌張,我們可以先來一段簡單的代碼來測試一下https請求。
<?php
$url = "https://www.baidu.com";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 不驗證證書
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 不驗證證書
echo curl_exec($curl);//輸出獲取到的數(shù)據(jù)
curl_close($curl);
?>
從代碼中我們可以看到,和http請求的方式一致,只不過在我們使用https的時候,還需要加上一堆驗證證書不驗證證書的參數(shù)設(shè)置。這里我們可以使用一個比較好的方法是查看是否是為正常的響應(yīng)數(shù)據(jù),如下所示:
<?php
$url = 'https://mydomain.com';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);//設(shè)置超時時間,單位秒
$data = curl_exec($curl);
$headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);//獲取返回頭的大小
$header = substr($data, 0, $headerSize);//提取出返回頭信息
$body = substr($data, $headerSize);//提取出返回體
curl_close($curl);
if (strpos($header, '200 OK') !== false) {//判斷響應(yīng)代碼是否是200
echo $body;//輸出獲取到的數(shù)據(jù)
}
?>
這樣過后我們獲取的請求數(shù)據(jù)就更加安全可靠。 總之,curl是一套非常強(qiáng)大的工具庫,在php中得到了進(jìn)一步的使用,讓我們在請求接口、數(shù)據(jù)獲取、數(shù)據(jù)上傳下載方面更加方便快捷。同時在請求https協(xié)議的接口時,注意一定要檢查證書驗證的問題。