詳解php的curl幾個函式

2022-03-07 02:54:45 字數 3576 閱讀 4498

關於php的curl一系列函式,這裡解釋一下它們的作用。

在html中,我們可以通過form設定http的post和get提交,但假如我們獲取的資料不是從html中來的,而是php指令碼主動向其他伺服器提交呢?這個時候,我們應該怎麼實現post和get提交資料呢?答案就是php的curl函式或者stream_context_create函式,還有fsockopen函式等等方式,這裡講一下curl的提交設定,其他兩種有時間會寫一下。

curl的函式實現http提交,關鍵就在四個函式:

乙個是:curl_init()

作用:初始化curl的``套接流``

第二個是:curl_setopt()

作用:設定http提交引數

第三個是:curl_exec()

作用:執行curl ``套接流`` 的提交,並獲取伺服器返回的內容

第四個:curl_close()

作用:關閉已經實現http提交目的的``套接流``

說是說四個函式,但實際的應用中,其實,就是設定curl_setopt這個函式的引數而已,其他三個都是跑龍套的,呵呵。

不相信,下面我們舉乙個例子來利用curl系列函式實現http提交,不羅嗦了,直接上**:

<?php

/**建立乙個curl_init提交函式,模擬get提交,模擬post提交,模擬json提交

*$url 提交的伺服器位址,必須

*$data 提交的資料,必須,是關聯陣列,

*$method 提交的方式,必須,預設get提交,選項值,只能填get、post、json

*$options 其他選項,可有可以無,如果設定了,不能設定curlopt_url,必須符合curl_setopt_array()的引數語法

*如果失敗則返回false,提交資料成功,則返回伺服器返回的結果

*/function curl($url='',$data=array(),$method='get',$options=array

())

if(!is_array($data) && empty($data

))

$method = strtolower($method

);

if(!in_array($method,array('get','post','json')))

//初始化curl控制代碼,

$ch =curl_init();

//設定伺服器返回的資料不直接輸出,而是保留在curl_exec()的返回值中

curl_setopt ($ch, curlopt_returntransfer, 1);

if(!empty($options) && is_array($options

)) }

switch($method)}

$url = ""; //

下面是測試,本人是測試成功了,我伺服器是直接輸出$_post,$_get

$data = array( 'name' => 'curl' , 'method' => 'post');

$method ='post';

var_dump(curl($url,$data,$method));

注意::這裡::

json資料提交,伺服器必須以php://input獲取,如file_get_contents('php://input');

bool curl_setopt_array ( resource $ch , array $options )的引數舉例:

設定curl套接流$ch相應的選項

$options = array(

curlopt_ssl_verifypeer => false,

curlopt_header => false

);post和json,curl_setopt_array函式不能設定curlopt_postfields,curlopt_post這兩項

因為我這函式沒有排除,要排除,你可以自己修改這個函式

curl_setopt_array函式,其實也就是```批量```設定curl_setopt()函式的選項,

他們的作用是一樣的,我這裡利用它,是為了方便

post提交可以上傳檔案,但是檔案的位址必須這樣設定,下標為『file』,位址前加@

總結:假如上面的函式你看不懂,那不要緊,下面我給你解釋一下,上面函式的主要意思:

利用curl套接流實現http提交的設定步驟:

首先:初始化curl

這對應上面的第乙個步驟:

//

初始化curl控制代碼,

$ch = curl_init();

其次:設定curl的引數,也就是設定http提交的引數,這對應上面的第二個步驟:

//

把要提交的資料轉換為get鍵值對提交

設定post提交

curl_setopt($ch,curlopt_post,true

);//

提交post的資料

curl_setopt($ch,curlopt_postfields,$data);

看到沒有,設定post提交其實就是在curl_setopt函式中設定引數,

$ch 是curl_init初始化的套接流,curl_setopt函式就是不停的在這個$ch套接流中設定引數,

第乙個引數:curlopt_url,這是乙個很關鍵的引數,它是設定要提交到**的url

第二個引數:curlopt_post,設定提交的方式post

第三個引數:curlopt_postfields,設定post的提交資料

其他引數,我這裡就不列舉了,假如你需要參考,可以鏈結這裡:

最後兩步:

一步是:curl_exec(),這個是執行curl套接流$ch

//設定伺服器返回的資料不直接輸出,而是保留在curl_exec()的返回值中

curl_setopt ($ch, curlopt_returntransfer, 1);

$return = curl_exec($ch);

這裡要說一下,你其實可以不設定curlopt_returntransfer這個引數,假如你不設定,那麼,伺服器返回值將會echo出來,而不是儲存在上面的$return中

另一步是:

curl_close($ch);

這個是關閉執行完成的套接流,免得它占用記憶體資源

再給兩個函式:

curl_errno():

返回最後一次curl操作的錯誤號。

curl_error():

返回一條最近一次curl操作明確的文字的錯誤資訊。

這兩個函式可以追蹤curl_init套接流的錯誤資訊,可以根據它們來調整設定curl過程中的錯誤。

cURL常用的幾個PHP函式

curl是乙個功能強大的php庫,我們可以使用php的curl採用get post等方式傳送請求,獲取網頁內容以及取乙個xml檔案並把其匯入資料庫等等。本文中收集了幾種常用的php的curl函式,以備使用。主要的有幾個php函式用於 get,post,http驗證,302重定向,設定curl的 在w...

PHP使用CURL詳解

curl是乙個非常強大的開源庫,支援很多協議,包括http ftp telnet等,我們使用它來傳送http請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的http協議引數,並且支援https。curl可以根據url字首是 http 還是 https 自動選擇是否加密傳送內容。使用curl的...

PHP使用CURL詳解

curl是乙個非常強大的開源庫,支援很多協議,包括http ftp telnet等,我們使用它來傳送http請求。它給我 們帶來的好處是可以通過靈活的選項設定不同的http協議引數,並且支援https。curl可以根據url字首是 http 還是 https 自動選擇是否加密傳送內容。使用curl的...