PHP Curl Webservice 快速上手
對于許多web開發人員而言,與第三方服務合作是常見的需求。一個典型的例子是與支付網關服務連接。響應這些服務API調用的方法之一是使用PHP中的CURL。本文將詳細介紹如何使用PHP CURL來發起Webservice調用,并展示一些實際的代碼示例。
使用CURL發起GET請求
讓我們從CURL的最基本形式開始。下面是一個簡單的PHP CURL Get請求的例子:
$url="http://www.example.com/test.php?id=1"; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5); $data=curl_exec($ch); curl_close($ch); echo $data;如上所示,我們構造一個URL字符串,然后將其傳遞給curl_init()函數,該函數設置其URL。接下來,我們設置了返回數據的選項,并將它們傳遞給curl_setopt()函數。最后,通過curl_exec()函數執行請求,獲取到結果并關閉curl句柄。 使用CURL發起POST請求 現在我們來看看如何使用CURL發起POST請求。這很容易實現,只需要用curl_setopt_array()替代上面的curl_setopt()函數,傳遞一組選項數組即可。例如:
$url="http://www.example.com/test.php"; $fields=array('id'=>1,'name'=>'example'); $ch=curl_init(); curl_setopt_array($ch,array( CURLOPT_URL=>$url, CURLOPT_RETURNTRANSFER=>true, CURLOPT_CONNECTTIMEOUT=>5, CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>$fields )); $data=curl_exec($ch); curl_close($ch); echo $data;如上所示,我們首先設置一個URL字符串,然后定義一個名為$fields的選項數組,它包含POST的參數。接下來,我們為curl_setopt_array()函數傳遞了選項數組,包括指定POST請求以及$fields數據參數。 使用CURL連接Webservice 現在我們已經了解了如何使用CURL發起GET和POST請求,我們可以開始探索如何使用CURL連接Webservice。我們將使用PHP SOAP客戶端擴展來演示。 在PHP中使用SOAP客戶端,我們需要提供一個WSDL地址。一個WSDL(Web Services Description Language)文件包含有關實現Webservice的關鍵詳細信息。我們將使用PHP的SOAP擴展并使用curl_setopt()來配置它。例如:
$options = array( 'soap_version'=>SOAP_1_2, 'exceptions'=>true, 'trace'=>1, 'cache_wsdl'=>WSDL_CACHE_NONE, 'stream_context'=>stream_context_create(array('http' =>array('header' =>'Authorization: Basic ' . base64_encode("$username:$password")))), 'curl'=>array( CURLOPT_PORT=>80, CURLOPT_HTTPAUTH=>CURLAUTH_BASIC, CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>30, CURLOPT_USERPWD=>"$username:$password" ) ); $client = new SoapClient('http://www.example.com/webservice.wsdl', $options);在上面的代碼中,我們使用stream_context_create()函數創建了一個HTTP頭部,其中名為Authorization的信息包含用戶名和密碼。接下來,我們使用curl_setopt()函數為SOAP客戶端提供指定curl參數,例如端口,HTTP認證和用戶數據。 展示返回數據使用CURL的Progress功能 最后,讓我們來探索CURL的Progress功能,它可以在發生I/O時定期調用我們自定義的函數。下面是一個示例:
$url='http://www.example.com/largefile.zip'; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_PROGRESSFUNCTION,'progress'); curl_setopt($ch,CURLOPT_NOPROGRESS,false); curl_setopt($ch,CURLOPT_BUFFERSIZE,64); curl_exec($ch); curl_close($ch); function progress($resource,$download_size,$downloaded,$upload_size,$uploaded) { if($download_size >0) { $percent=$downloaded/$download_size*100; echo intval($percent)."% downloaded...\n"; } }我們使用curl_setopt()函數設置了進度功能,它會調用我們自定義的progress()函數,該函數會根據當前的下載情況返回進度百分比。在上面的代碼中,我們還使用了一些其他選項,例如指定緩沖區大小和禁用curl的默認進度顯示。 總結 在整個開發中,了解如何使用CURL來連接Webservice非常重要。在本文中,我們演示了如何使用CURL來發起GET和POST請求,如何使用SOAP客戶端擴展,以及如何使用CURL的進度功能。希望這篇文章對您有所幫助。
下一篇php 可以