首頁 >後端開發 >php教程 >PHP下的cURL函式庫

PHP下的cURL函式庫

巴扎黑
巴扎黑原創
2016-11-21 13:40:421437瀏覽

PHP下的cURL函式庫主要有兩個Requests和Guzzle,兩個都很複雜。

 

Requests優先使用cURL,沒有cURL時會自動啟用fsockets,除非你手動指定了Transport。

 

Guzzle有豐富的日誌庫支援和日誌格式,用插件訂閱的方式訂閱,從程式碼上看採用事件機制,品質更高。

它只支援cURL(至少只有v3版本是),並依賴Symfony的EventEmitter,但它被ReactPHP所依賴。

最近(2014-03-28)發現它從v3.8.1升級到v4.0.0rc,居然把Namespace改了,將前兩段縮減為一段,源碼目錄也去掉了頂層的Guzzle,毫無意義還導致既不向前相容,也和其他常見PHP庫不一致。

 

現在是重點,Guzzle通常用得好好的,但昨天發現一個問題,有個遠端的網址,有到支付寶去查詢支付結果。呼叫這個網址時,Guzzle會不成功,但Requests可以。

 

下面是關於cURL指令的,其有兩個超時時間,connect-timeout和timeout-max(後面這個通常在程式中就叫做timeout),其中後者包含前者,cURLl預設的connect-timeout是300秒,沒有給timeout-max設定值,但由於包含關係,當你不設定timeout時,它至少也是300秒。

而對於PHP的fsockets,由於php.ini中有個配置項default_socket_timeout,其預設值才60秒。

另外cURL預設不支援http redirect,需要傳遞-L 選項(無參數),但根據使用PHP和Python的經歷,不少cURL庫默認是開啟了redirect,至少Guzzle的文檔明確說了是開啟了的,如果需要,要手動關閉。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn