php請求介面逾時如何解決

王林
發布: 2023-02-25 16:38:02
原創
6240 人瀏覽過

php請求介面逾時如何解決

【HTTP存取】

一般我們造訪HTTP方式很多,主要是:curl, socket, file_get_contents() 等方法。

如果碰到對方伺服器一直沒有回應的時候,我們就悲劇了,很容易把整個伺服器搞死,所以在訪問http的時候也需要考慮逾時的問題。

[ CURL 存取HTTP]

CURL 是我們常用的一種比較可靠的存取HTTP協定介面的lib庫,效能高,還有一些同時支援的功能等。

CURL:

curl_setopt($ch, opt) 可以設定一些逾時的設置,主要包括:

#CURLOPT_TIMEOUT設定cURL允許執行的最長秒數。

CURLOPT_TIMEOUT_MS 設定cURL允許執行的最長毫秒數。 ( 在cURL 7.16.2中被加入。從PHP 5.2.3起可使用。)

CURLOPT_CONNECTTIMEOUT 在發起連接前等待的時間,如果設定為0,則無限等待。

CURLOPT_CONNECTTIMEOUT_MS 嘗試連線等待的時間,以毫秒為單位。如果設定為0,則無限等待。  在cURL 7.16.2中被加入。從PHP 5.2.3開始可用。

CURLOPT_DNS_CACHE_TIMEOUT 設定在記憶體中保存DNS資訊的時間,預設為120秒。

curl普通秒級超時:

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_TIMEOUT, 60);   //只需要設定一個秒的數量就可以

curl_setopt($ ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_USERAGENT, $defined_vars['HTTP_USER_AGENT']);

curl級逾時使用:

curl_setopt($ch, CURLOPT_TIMEOUT, 60);

curl如果需要毫秒超時,需要增加:

curl_easy_setopt(curl, CURLOPT_NOSAL,

##curl_easy_setopt(curl, CURLOPT_NOSAL, 1L );

或是:

curl_setopt ( $ch,  CURLOPT_NOSIGNAL, true); 是可以支援毫秒等級逾時設定的

# curl一個毫秒超時的範例:

<?php
if (!isset($_GET[&#39;foo&#39;])) {
    
// Client
    $ch = curl_init(&#39;http://example.com/&#39;);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_NOSIGNAL, 1);  
//注意,毫秒超时一定要设置这个
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); 
//超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用
    $data = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);
 
    if ($curl_errno > 0) {
        echo "cURL Error ($curl_errno): $curl_error\n";
    } else {
        echo "Data received: $data\n";
    }
} else {
    
// Server
    sleep(10);
    echo "Done.";
}
?>
登入後複製
其他一些技巧:

1. 依照經驗總結是:cURL 版本>= libcurl/7.21. 0 版本,毫秒超時是一定生效的,切記。

2. curl_multi的毫秒超時也有問題。 。單次存取是支援ms級逾時的,curl_multi並行調多個會不准

[流處理方式存取HTTP]

除了curl,我們還經常自己使用fsockopen、或是file操作函數來進行HTTP協定的處理,所以,我們對這塊的逾時處理也是必須的。

推薦教學:PHP影片教學

####

以上是php請求介面逾時如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板