php的curl如何請求其他服務器上的數據
curl可以幹什麼?
-
curl是PHP的一個擴展,利用該擴展可以實現服務器之間的數據或文件傳輸
也就是說curl就是一個工具,用來做服務器之間數據、文件傳輸的工具
用來採集網絡中的html網頁文件、其他服務器提供接口數據等
開啓curl擴展
(1) 在php.ini裏面開啓curl這個擴展
(2) 將PHP的安裝路徑保存到環境變量的系統變量中(環境變量之間的分隔符是英文的分號)
(3) 重啓apache服務器
(4) 重啓計算機
發送curl分爲4步
-
初始化curl對應函數-> curl_init();
-
設置curl的請求信息,如請求地址、需要發送給目標服務器的數據、設置是否校驗https等 對應函
數 -> curl_setop();
-
執行發送請求 對應函數-> curl_exec();
-
發送請求結束後記得關閉不適用的curl 對應函數-> curl_close();
代碼實例
<?php
$ch = curl_init();
參數1:curl資源,
參數2:需要設置的CURLOPT_XXX選項,用來設置curl的各種請求,如是否攜帶參數,是否驗證https等,是否爲 POST請求,根據手冊,此參數爲固定寫法。
參數3:語句柄對應的value值
)
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch);
curl_close($ch);
?>
實例1:使用curl向https://xxx.xxx.com發送POST請求(注意這裏的$data爲json)
<?php
function request_curl()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://xxx.aaa.com/api/createUser');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$data = json_encode([
'userName' => 小明,
'age' => 18,
'sex' => '男'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = curl_exec($ch);
curl_close($ch);
var_vump($output);
return $output;
}
?>
實例2:使用curl發送post請求(這裏發送的數據$data爲數組類型)
<?php
function request_curl()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https:xxx.aaa.com/api/createdUser');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$data = [
'name'=>'小明',
'sex'=>'男',
'age'=>18,
];
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HEADER, 0);
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);
return $response;
}
?>
實例3:發送get請求
<?php
function request_curl()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http:xxx.aaa.com/api/user?name=小明&age=18');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
?>