使用curl_init實現HTTP請求

一、curl_init簡介

curl_init()是一個初始化curl會話的函數,返回的是一個curl資源句柄,我們可以通過這個句柄設置curl的參數,發起請求,獲取響應等操作。在php中使用curl完成http請求是非常方便的。

使用curl_init()函數創建curl句柄後,需要通過curl_setopt()設置各種參數,如請求的url、請求方式、請求頭信息等。然後使用curl_exec()函數發送請求獲取響應。最後使用curl_close()函數銷毀curl句柄。

二、基本使用示例

以下是一個簡單的使用curl發送HTTP GET請求的示例:

$url = 'http://example.com/api/get_user_info?id=123';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

在上面的示例中,首先定義了請求的url,然後使用curl_init()函數創建curl句柄,並調用curl_setopt()函數設置了請求的url和返回response時是否直接輸出。最後使用curl_exec()函數發送請求並獲取響應內容,最後銷毀curl句柄。

三、發起POST請求

使用curl發起POST請求也非常簡單,使用curl_setopt()設置CURLOPT_POST為true即可。如下面的示例:

$url = 'http://example.com/api/create_user';
$data = ['name' => 'jack', 'age' => 20];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

上面的代碼中,定義了請求的url和請求的數據,使用curl_init()函數創建curl句柄,並使用curl_setopt()函數設置了請求信息,包括url、是否直接輸出結果、是否為POST請求及請求的數據。使用curl_exec()函數發送請求並獲取響應。最後銷毀curl句柄。

四、設置請求頭信息

在實際開發中,很多情況下需要設置請求頭信息,如請求接口需要設置Authorization token驗證信息。那麼我們可以使用curl_setopt()函數設置請求頭信息,如下面的示例:

$url = 'http://example.com/api/get_user_info';
$headers = ['Authorization: Bearer xxxxxxxxxxxxxxxx'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

在上面的代碼中,定義了請求的url和請求頭信息,使用curl_init()函數創建curl句柄,並使用curl_setopt()函數設置了請求信息,包括url、是否直接輸出結果、請求頭信息。最後使用curl_exec()函數發送請求並獲取響應。最後銷毀curl句柄。

五、設置超時時間

在實際開發中,因為網絡的不確定性,很可能出現請求超時等情況。為了避免這種情況的發生,我們可以設置curl的請求超時時間,超過設定時間則會自動中斷請求。設置請求超時時間也很簡單,即使用curl_setopt()函數設置CURLOPT_TIMEOUT即可。如下面的示例:

$url = 'http://example.com/api/get_user_info';
$timeout = 5;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

在上面的代碼中,定義了請求的url和超時時間,使用curl_init()函數創建curl句柄,並使用curl_setopt()函數設置了請求信息,包括url、是否直接輸出結果、超時時間。最後使用curl_exec()函數發送請求並獲取響應。最後銷毀curl句柄。

六、設置Cookie

在一些業務場景中,需要使用Cookie來維持用戶的登錄狀態等信息。使用curl發送請求時設置Cookie也很方便,可以使用curl_setopt()函數設置CURLOPT_COOKIE即可。如下面的示例:

$url = 'http://example.com/api/get_user_info';
$cookie = 'session_id=xxxxxxxxxxxxx';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

在上面的代碼中,定義了請求的url和Cookie信息,使用curl_init()函數創建curl句柄,並使用curl_setopt()函數設置了請求信息,包括url、是否直接輸出結果、Cookie信息。最後使用curl_exec()函數發送請求並獲取響應。最後銷毀curl句柄。

七、設置多個請求一起發送

有時候我們需要批量發送請求,而且不希望每個請求的響應都要等待上一個請求的響應到達才能繼續發下一個請求,此時我們可以使用curl_multi_init()函數進行多個請求同時發起。如下面的示例:

$urls = [
    'http://example.com/api/get_user_info?id=1',
    'http://example.com/api/get_user_info?id=2',
    'http://example.com/api/get_user_info?id=3',
];
$ch_arr = [];
$mh = curl_multi_init();
foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $ch_arr[] = $ch;
}
do {
    curl_multi_exec($mh, $running);
    $info = curl_multi_info_read($mh);
} while ($running > 0);
foreach ($ch_arr as $ch) {
    $response = curl_multi_getcontent($ch);
    var_dump($response);
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}
curl_multi_close($mh);

以上代碼中定義了三個請求的url,然後使用curl_multi_init()函數創建了一個curl批處理句柄,遍歷每個請求的url,使用curl_init()函數為每個請求創建curl句柄,並調用curl_setopt()函數設置請求信息。使用curl_multi_add_handle()函數將每個curl句柄加入curl批處理句柄,然後使用curl_multi_exec()函數發送請求。使用curl_multi_info_read()函數獲取curl執行情況的信息,將所有請求都執行完畢後,使用curl_multi_getcontent()函數獲取每個請求的響應,並輸出。最後使用curl_multi_remove_handle()函數將每個curl句柄從curl批處理句柄中刪除,並調用curl_close()函數關閉curl句柄。最後使用curl_multi_close()函數關閉curl批處理句柄。

八、結語

使用curl_init()可以完成各種HTTP請求,能滿足我們的各種業務場景使用。使用curl發送HTTP請求的好處在於可以設置各種請求參數,如請求頭、請求體、請求超時時間等,使我們可以自由的控制請求行為。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/285827.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-22 16:06
下一篇 2024-12-22 16:06

相關推薦

  • 為什麼要加請求頭(HTTP Header)?

    在進行網頁抓取(Web Scraping)時,請求頭(HTTP Header)扮演着非常重要的角色。請求頭中包含了用戶代理(User Agent)、cookie、referer等信…

    編程 2025-04-27
  • HTTP請求方式的選擇:POST還是GET?

    對於使用xxl-job進行任務調度的開發者,通常需要發送HTTP請求來執行一些任務。但是在發送請求時,我們總是會遇到一個問題:是使用POST還是GET?下面將從多個方面對這個問題進…

    編程 2025-04-27
  • 如何快速發布http接口

    想要快速發布http接口,可以從以下幾個方面入手。 一、選擇合適的框架 選擇合適的框架對於快速發布http接口非常重要。目前比較受歡迎的框架有Flask、Django、Tornad…

    編程 2025-04-27
  • 深入下探golang http server

    Go語言已經成為了軟件開發領域的熱門語言,它的高性能、應用廣泛、安全性好,使得它成為了眾多開發者心目中的首選編程語言。在眾多應用場景中,golang http server的應用非…

    編程 2025-04-23
  • Python HTTP服務詳解

    一、HTTP服務概述 HTTP(超文本傳輸協議)是互聯網上應用最為廣泛的一種網絡協議,負責客戶端和服務器之間的通信。而Python則是一種非常優秀的編程語言,它集成了許多庫,使得開…

    編程 2025-04-23
  • HTTP狀態碼412——前置條件失敗

    一、什麼是412狀態碼 HTTP狀態碼是客戶端與服務器進行通信時的返回碼,它表示服務器對請求的響應結果。HTTP狀態碼由3位數字表示,其中第一個數字的範圍為1-5,依次表示請求已經…

    編程 2025-04-23
  • http下載文件教程及常見問題解決

    一、下載http文件 要從http下載文件,最常見的方法是使用Python中的requests庫。下面是一個示例代碼,可以下載指定的文件: import requests url …

    編程 2025-04-22
  • 如何架設一個可用的HTTP代理服務器

    一、基礎概念 HTTP代理服務器是一種服務器,它可以代替客戶端向網絡服務器發送請求並返迴響應。HTTP代理通常用於訪問受限的網站、監視網絡流量或提高訪問速度。 HTTP代理可以分為…

    編程 2025-04-22
  • HTTP 狀態碼101 – 切換協議

    HTTP 狀態碼101表示服務器正在切換協議。它是一個比較少見的狀態碼,但仍然在某些場景下被廣泛使用。本文將從以下幾個方面詳細介紹狀態碼101的含義、用途以及相關的實際應用。 一、…

    編程 2025-04-18
  • curlcookie:如何在編程中方便地處理HTTP Cookie

    一、了解HTTP Cookie HTTP Cookie是HTTP協議中的一個重要概念,它允許web服務器在客戶端存儲信息,以便在一個回話中保持狀態。當客戶端發送請求時,服務器可以在…

    編程 2025-04-12

發表回復

登錄後才能評論