php 訪問超時,php請求介面超時如何解決

2021-10-25 21:28:27 字數 1629 閱讀 6865

【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普通秒級超時使用:

curl_setopt($ch, curlopt_timeout, 60);

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

curl_easy_setopt(curl, curlopt_nosignal, 1l);

或者是:

curl_setopt ( $ch, curlopt_nosignal, true); 是可以支援毫秒級別超時設定的

curl乙個毫秒級超時的例子:<?php

if (!isset($_get['foo'])) else 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 SOAP 客戶端訪問超時

今天在windows機器上做php soap的測試。服務端環境 windows 客戶端環境 windows 服務端和客戶端都在乙個環境 windows 上。遇到的問題 服務端能正常的啟動,客戶端訪問服務端的時候,一直顯示超時 504錯誤。我的開發環境是nginx php,準備作乙個soap的實驗,s...

php請求介面

php模擬post傳送請求,呼叫引數 方法 function request post url param posturl url curlpost param ch curl init 初始化curl curl setopt ch,curlopt url,posturl 抓取指定網頁 curl s...

php請求API介面方法

thinkphp下直接放入公共函式即可.通過url獲取頁面資訊 param string url 位址 return string 返回頁面資訊 function get url url 模擬post提交 param string url 位址 param string data 提交的資料 ret...